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么?
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; }