⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_33572.htm

📁 vc
💻 HTM
字号:
<p>
序号:33572 发表者:killsea 发表日期:2003-03-21 23:47:05
<br>主题:我是个菜鸟,刚来这个坛子,想自己用api写个socket类库,有几处不解,请高手指教
<br>内容:我是个菜鸟,刚来这个坛子,想自己用api写个socket类库,有几处不解,请高手指教<BR>memset(&amp;sockAddr,0,sizeof(sockAddr));<BR>memcpy()<BR>还有zeromemery()这几个函数是做什么的阿?好像与内存有关阿?<BR>//////////////////<BR>InitializeCriticalSection(&amp;m_csLock);<BR>EnterCriticalSection(&amp;m_csLock);<BR>DeleteCriticalSection(&amp;m_csLock);<BR>LeaveCriticalSection(&amp;m_csLock);<BR>这几个函数好像锁定不锁定的,是干什么的阿?<BR>//////////////////<BR>ASSERT(lpszServer != NULL);<BR>最头头疼的就是他了,他是干什么的阿?好像好多地方都出现阿?<BR>///////////////<BR>T2A(m_szRoomName),__min(_tcslen(m_szRoomName)+1,bufsize<BR>这T2A又是什么阿?完全不懂<BR>USES_CONVERSION;//这个也是天书<BR>嘿嘿,好低级的问题阿,<BR>///////////////<BR>_tcsncpy(m_szRoomName,lpszRoomName,__min(_tcslen(lpszRoomName)+1,63));<BR>这个以下划线开头的是什么东西阿<BR>我看到了很多下划线开头的函数,他们是不是有什么共同之处阿?<BR><BR>不好意思贴个函数,有多处不解,各位老大帮我看看<BR>BOOL CChatClient::CreateClient(HWND hNotifyWnd,LPCTSTR lpszServer,int port)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(lpszServer != NULL);//这家活老出现,就不知道是干什么的?<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(hNotifyWnd != NULL);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;USES_CONVERSION;//这儿又是干什么阿?<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LPSTR lpszAscii = T2A((LPTSTR)lpszServer);//这儿就是T2A阿,不解?<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_SvrAddr.sin_family = AF_INET;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_SvrAddr.sin_addr.s_addr = inet_addr(lpszAscii);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_SvrAddr.sin_addr.s_addr == INADDR_NONE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPHOSTENT lphost;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lphost = gethostbyname(lpszAscii);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (lphost != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_SvrAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost-&gt;h_addr)-&gt;s_addr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_tcscpy(m_szErrorInfo,lpErrorResvHost);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_SvrAddr.sin_port = htons((u_short)port);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_sktClient.Create(SOCK_DGRAM);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_sktClient.SetNotifyWnd(hNotifyWnd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_nStatus = nStatus_NotLogin;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_szErrorInfo[0] = _T('\0');<BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}<BR>这个函数好像先从参数那儿获取了m_SvrAddr.sin_addr.s_addr = inet_addr(lpszAscii);<BR>可是它好像又判断在某种条件下if (m_SvrAddr.sin_addr.s_addr == INADDR_NONE)<BR>自己获取主机 lphost = gethostbyname(lpszAscii);重新赋值给他,这个INADDR_NONE什么意思阿<BR>他为什么要这么做阿?这个判断if (m_SvrAddr.sin_addr.s_addr == INADDR_NONE)是什么意思阿?<BR>最后请较<BR>如果我这样<BR>服务器socket()--àbind()--àrecvfrom()--àsendto-&gt;closesocket()<BR>客户端socket()--àbind()--àsendfrom()--àrecvfrom--àclosesocketr()<BR>这样行不行啊,用UDP,服务器一对多,是不是可以通过recvfrom()获取客户端的in_addr有链表串起来,用的时候再找出对应的in_addr用sendto出去,用一个公用的socket端口,这个方法还行阿?<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:战鹰 回复日期:2003-03-26 14:57:32
<br>内容:memset是使用指定数字填充一块内存<BR>ZeroMemory = memset(..,0,size)<BR>memcpy是拷贝一块内存到指定缓冲地址<BR><BR>InitializeCriticalSection(&amp;m_csLock);<BR>EnterCriticalSection(&amp;m_csLock);<BR>DeleteCriticalSection(&amp;m_csLock);<BR>LeaveCriticalSection(&amp;m_csLock);<BR>是互斥量相关的函数,主要用来防止多线程(进程)访问,当使用EnterCriticalSection时,别的线程就不能访问,直到LeaveCriticalSection<BR><BR>USES_CONVERSION;//这个是告诉编译器,使用ATL中的字符相关宏,即T2A这类宏,他们处理多字节字符(MBCS)和宽字符(UNICODE)之间的转换,但是是栈中进行,所有不能处理太大的字符串。T2A是将(LPCTSTR)转换为char *类型<BR>_tcscpy这类也是处理MBCS和UNICODE的宏,当你定义为UNICODE和_UNICODE时,就会被转义为wcscpy,如没定义则转义为strcpy;一般的str*这类函数都有一_tcs*对应的宏来处理;<BR><BR>在ASSERT是DEBUG模式下的一个调试宏,指必须确定他的参数为真,否则就会在DEBUG下的程序弹出一异常对话框。<BR><BR>INADDR_NONE是inet_addr的返回值,只有没有匹配正确的IP地址时才返回!!!<BR><BR>你的方法可行!我以前做过此类程序!!<BR><BR>:)<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:killsea 回复日期:2003-03-26 17:50:01
<br>内容:老兄,太谢谢你了,感激ing
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -