MFC SOCKET服务器端
想做一个简单的MFC聊天程序
发送端经测试可以使用但是就是服务器端一直连接不上
首先我自己定制一个类
class ClistenSocket : public CAsyncSocket
用这个类的对象监听端口
BOOL CReceiveDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
m_ListenSocket.Create(9000);//监听端口
if(m_ListenSocket.Listen(1)==FALSE)
{
AfxMessageBox("Unable to Listen on that port,please try another port");
m_ListenSocket.Close();
return FALSE;
}
然后我重写了这个类的onaccept函数
void ReceiveSocket::OnAccept(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
Accept(((CReceiveDlg *)(AfxGetApp()->m_pMainWnd))->m_Socket);
//启用发送按钮
((CReceiveDlg *)(AfxGetApp()->m_pMainWnd))->m_ButtonSend.EnableWindow();
((CReceiveDlg *)(AfxGetApp()->m_pMainWnd))->m_Socket.AsyncSelect(
FD_READ|FD_WRITE|FD_CLOSE);
((CReceiveDlg *)(AfxGetApp()->m_pMainWnd))->m_ListWords.AddString(
"接受客户端的请求");
CAsyncSocket::OnAccept(nErrorCode);
}
其中m_Socket是我自己定制的另外一个类的对象,用来接收数据
class ReceiveSocket : public CAsyncSocket
不知道是哪里出错了,一直连接不上大家帮忙看下,MFC代码不好看我 就不发全了,大家看下谢谢 服务器 socket MFC 类
[解决办法]
如果OnAccept都没进来,说明根本就没连接,你发connect的代码,是你连接的问题。
还有 if(m_ListenSocket.Listen(1)==FALSE) 这边并不能这样判断,CAsyncSocket是非阻塞的,它会立刻返回,但是连接是需要时间的,你用 GetLastError会发现是WSAEWOULDBLOCK错误,解决方法1.应该在OnConnect中以nErrorCode 的值判断是否连接成功,2.或者也可以使用While循环在那边一直获取GetLasterror的值。3. 可以使用CSocket,这个是阻塞的,不会出现这个问题。
[解决办法]
监听放初始化里面也没问题啊,要服务端先监听,客户端才能连接的呀