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

关于SOCKET通信中服务器端的关闭有关问题

2012-03-14 
关于SOCKET通信中服务器端的关闭问题最近需要学一些有关于网络通信方面的代码,在网上找到了一个比较好的带

关于SOCKET通信中服务器端的关闭问题
最近需要学一些有关于网络通信方面的代码,在网上找到了一个比较好的带有封装类的实例,但是这个实例存在一个问题,就是其中用于服务器端关闭的代码实际上并不能关闭服务器,想问问各位大大原因可能在哪里。具体代码如下:
服务器端关闭代码:
void CWSocket::CloseServer()
{
if(!m_bListened) return;
if(m_sServer == NULL) return;

shutdown(m_sServer, SD_RECEIVE);
Sleep(50);
closesocket(m_sServer);
m_sServer = NULL;
m_bListened = FALSE;
}
Getlasterror()的报错是〖10057〗-由于套接字没有连接并且 (当使用一个 sendto 调用发送数据报套接字时) 没有提供地址,发送或接收数据的请求没有被接受。
客户端的关闭也是使用几乎完全相同的代码,正常关闭。

[解决办法]
可以看看linux网络编程,比看这些封装的例子好理解的多
[解决办法]
你这根本就没有链接上服务器吧。何来关闭?
[解决办法]
你跟踪一下,看看这个函数是在哪里返回的,有可能你第一句就返回了。其他有关socket确实能关闭了,不过好像是InValid_socket,而不是NULL,具体的忘了,你查查看。
[解决办法]
那就先把
shutdown(m_sServer, SD_RECEIVE);
Sleep(50);
注释掉,反正closesocket一定可以关闭的。看看能跑通不,然后精研下shutdown在你所在平台系统的具体用法,特别是调用时机。
[解决办法]
检查一下,套接字是不是重复关闭了。
10057 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。

热点排行