socket只响应一次FD_ACCEPT是什么问题

秀小川 2014-06-17 08:57:05

OnBnClickedStartServer()
{
WSADATA wsaData;

int ret = WSAStartup(MAKEWORD(2,0),&wsaData);
if(ret)
{
AfxMessageBox(_T("初始化网络失败!"));
}
m_Socket = ::socket(AF_INET,SOCK_STREAM,0);
ASSERT(m_Socket != INVALID_SOCKET);

CString str;
char host_name[255]={NULL};

if ( !gethostname(host_name,sizeof(host_name)))
{
PHOSTENT host_info = gethostbyname(host_name);
char *ip = inet_ntoa (*(struct in_addr *)*host_info->h_addr_list);
m_addr.sin_family = AF_INET;
m_addr.sin_addr.S_un.S_addr = inet_addr(ip);
m_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
m_addr.sin_port = htons(_wtoi(m_strPCPort));
ret = bind(m_Socket,(sockaddr*)&m_addr,sizeof(m_addr));
if(ret ==SOCKET_ERROR)
{
CString strTemp(_T(""));
strTemp.Format(_T("绑定失败,错误代码%d"), GetLastError());
showMsg(strTemp);
closesocket(m_Socket);
WSACleanup();
return ;
}
ret = listen(m_Socket,5);
if(ret ==SOCKET_ERROR)
{
CString strTemp(_T(""));
strTemp.Format(_T("绑定失败,错误代码%d"), GetLastError());
showMsg(strTemp);
closesocket(m_Socket);
WSACleanup();
return ;
}
showMsg(_T("服务器启动成功.") );
WSAAsyncSelect(m_Socket,this->m_hWnd,WM_SOCK,FD_ACCEPT|FD_READ|FD_CLOSE|FD_CONNECT);
}
}


LRESULT CTransimitSMSDlg::OnSocket(WPARAM wParam, LPARAM lParam)
{
UpdateData();
char data[100];
CString strTemp, strShow;
ZeroMemory(data, 100);
int len;
SOCKET sock;

switch (lParam)
{
case FD_READ:
sock = (SOCKET)wParam;
len = recv(sock,data,100,NULL);
strShow = (_T("收到数据:"));
for ( int i = 0;i < len; i++)
{
strTemp.Format(_T("%02X "), data[i]);
strShow += strTemp;
}
case FD_ACCEPT:
// s = ::accept(m_Socket,NULL,NULL);
strShow = _T("有客户连接!");
break;
case FD_CLOSE:
strShow = _T("客户断开连接!");
break;
default:
break;

}
showMsg(strShow);
UpdateData(FALSE);
return 0;
}


一个简单的网络编程的小例子,为什么我的Socket只响应一次FD_ACCEPT消息以后,不再响应任何消息..........
...全文
697 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
秀小川 2014-06-17
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
FD_ACCEPT: a. When WSAAsyncSelect called, if there is currently a connection request available to accept. b. When a connection request arrives, if FD_ACCEPT not already posted. c .After accept called, if there is another connection request available to accept. 只有一个客户端去连接(客户端调用connect()) ???
客户端我还没写,用的是一个 "网络调试助手",我用两个客户端去连接也是只接到一次FD_ACCEPT消息
Eleven 2014-06-17
  • 打赏
  • 举报
回复
FD_ACCEPT: a. When WSAAsyncSelect called, if there is currently a connection request available to accept. b. When a connection request arrives, if FD_ACCEPT not already posted. c .After accept called, if there is another connection request available to accept. 只有一个客户端去连接(客户端调用connect()) ???

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧