subject_24545.htm

来自「一些关于vc的问答」· HTM 代码 · 共 4 行

HTM
4
字号
<p>
序号:24545 发表者:qiaofeng 发表日期:2002-12-13 16:02:06
<br>主题:有关CAsyncSocket类的问题
<br>内容:我编了个C/S程序,客户端也可连到服务器端,但不知道为什么服务器只能收到第一次发送的内容,第二次就不行,我的LISTEN函数如下:<BR>void CCSockServerDlg::OnListen() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your control notification handler code here<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_srvrSocket.m_hSocket==INVALID_SOCKET)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL bFlag=m_srvrSocket.Create(1088,SOCK_STREAM,FD_ACCEPT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (bFlag==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("Socket Error!0");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_srvrSocket.Close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("Socket OK");<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//“侦听”成功,等待连接请求<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_srvrSocket.Listen(1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nErrorCode = m_srvrSocket.GetLastError();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (nErrorCode!=WSAEWOULDBLOCK)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("Socket Error!");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_srvrSocket.Close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>}<BR>ACCEPT函数如下:<BR>void CMyServerSocket::OnAccept(int nErrorCode) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your specialized code here and/or call the base class<BR>&nbsp;&nbsp;&nbsp;&nbsp;//侦听到连接请求,调用Accept函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;CNewSocket* pSocket = new CNewSocket();<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (Accept(*pSocket))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("Accept");<BR>&nbsp;&nbsp;&nbsp;&nbsp;pSocket-&gt;AsyncSelect(FD_READ);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pSocket=pSocket;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete pSocket;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//CAsyncSocket::OnAccept(nErrorCode);<BR>}<BR>RECEIVE函数如下:<BR>void CNewSocket::OnReceive(int nErrorCode) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString shu;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your specialized code here and/or call the base class<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CCSockServerApp* pApp=(CCSockServerApp*)AfxGetApp();<BR>&nbsp;&nbsp;&nbsp;&nbsp;CCSockServerDlg* pDlg=(CCSockServerDlg*)pApp-&gt;m_pMainWnd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;shu=m_szBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDlg-&gt;m_MESSAGE.InsertString(-1,m_szBuffer);<BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(m_szBuffer);<BR>&nbsp;&nbsp;&nbsp;&nbsp;memset(m_szBuffer,0,sizeof(m_szBuffer));<BR>&nbsp;&nbsp; // 直接转发消息<BR>&nbsp;&nbsp;&nbsp;&nbsp;AsyncSelect(FD_WRITE);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//CAsyncSocket::OnReceive(nErrorCode);<BR>}<BR><BR>各位大哥帮我看看怎么回事,多谢了<BR>2002-12-13 16:04:59

⌨️ 快捷键说明

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