首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于socket连接的有关问题

2012-05-05 
关于socket连接的问题我现在写了socket的类一个叫CServerSocket,一个叫CSocServer,我分别用这两个做了两个

关于socket连接的问题
我现在写了socket的类一个叫CServerSocket,一个叫CSocServer,我分别用这两个做了两个线程,然后绑定端口不一样。一个是8888,一个是9527,当我第一个的CServerSocket的连接的时候我的第二个没有接收,但是当我第二个connect时候第一个的accept却接收到了。这是怎么一会回事?

这个事第二个线程里的
while(1)
{
CSockServer SocketSrv;
//pMain->m_Flag--;
SocketSrv.Listen(); //这个里面有accept这个函数
if (!SocketSrv.Recevie())
{
AfxMessageBox("接收失败!请重新开始!");
return 0L;
}
//AfxMessageBox("监听一次!!!");
if(!SocketSrv.m_ClientInfo.IsEmpty())
{
pMain->SendFile(SocketSrv);
}
SocketSrv.Close();
//pMain->m_Flag++;
}

第一个线程里的
while(1)
{
SOCKET clientSocket = INVALID_SOCKET;
////////////////在这一步的时候我的另一个端口就是那个CSocServer类的connect时候,这个却接收了。。这是为什么?
clientSocket = accept(m_listenSocket, (struct sockaddr *)&clientSockaddr, &addrlen);
if(clientSocket == INVALID_SOCKET)
{
closesocket(m_listenSocket);
return 1;
}
send(clientSocket, szmsg, sizeof(pMainWnd->m_ValueExam), 0);
closesocket(clientSocket);
}

[解决办法]
以你发的代码来看,两个线程应该没什么冲突。

要么就是你编写的Listen()函数有问题,要么就是你设置协议族有问题。仔细检查这两方面。
[解决办法]
你把客户端服务器端做到一起了?服务器端须先启动listen监听,accept客户端的连接,客户端这个时候去connect连接服务器端
[解决办法]

探讨
引用:

以你发的代码来看,两个线程应该没什么冲突。

要么就是你编写的Listen()函数有问题,要么就是你设置协议族有问题。仔细检查这两方面。

嗯。协议族没什么问题。我已经解决。原来是因为我第一个中定义的socekt在自己定义的close函数里调用了WSACleanup()函数。导致了accept函数的失效。呵呵

热点排行