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

accept和closesocket有关问题

2012-10-13 
accept和closesocket问题我写了一个简单的socket程序,就是客户端向服务器发出数据,服务器接受到数据打印出

accept和closesocket问题
我写了一个简单的socket程序,就是客户端向服务器发出数据,服务器接受到数据打印出来,下面是服务器端程序,我按下面这样写,可以得到我想要的效果,
SOCKET acceptsock = accept(listensock, (sockaddr *)&ClientAddr, NULL);
while(1)
{

charrecvBuffer[MAX_PATH] = "";
charsendBuffer[MAX_PATH] = "";
recv(acceptsock,recvBuffer,MAX_PATH,0);
printf_s("%s\r\n",recvBuffer);
gets_s(sendBuffer,MAX_PATH);
send(acceptsock,sendBuffer,sizeof(sendBuffer),0);
if(strcmp(recvBuffer,"bye") == 0)
{
break;
}

}
closesocket(acceptsock);
可是按下面这样写就不行
while(1)
{
SOCKET acceptsock = accept(listensock, (sockaddr *)&ClientAddr, NULL);
charrecvBuffer[MAX_PATH] = "";
charsendBuffer[MAX_PATH] = "";
recv(acceptsock,recvBuffer,MAX_PATH,0);
printf_s("%s\r\n",recvBuffer);
gets_s(sendBuffer,MAX_PATH);
send(acceptsock,sendBuffer,sizeof(sendBuffer),0);
if(strcmp(recvBuffer,"bye") == 0)
{
break;
}
closesocket(acceptsock);
}
我想不明白,之前的来listensock没有改变,放在while里面和外面应该没有什么区别啊,为什么第二次接收不到数据了呢?我在recv()那设置了断点,第二次就不进入那个断点。

[解决办法]
编程要注意检查函数的返回值。
这是一个好习惯,也是写出正确的程序必须要做的
[解决办法]
accept的第三个参数能为NULL么?

C/C++ code
    SOCKET sAccept = INVALID_SOCKET;        SOCKADDR_IN clientAddr;    int len = sizeof(SOCKADDR);    memset(&clientAddr, 0, sizeof(clientAddr));        sAccept = accept(icpInstance->sListen, (SOCKADDR*)&clientAddr, &len);        if (INVALID_SOCKET == sAccept)    {                                DWORD dwErr = WSAGetLastError()    ;                byLog("%s(%d): accept() last err:%u", ERRR, LINE, dwErr);        return FALSE;            } 

热点排行