0

我有一个客户端/服务器应用程序。客户端向服务器发送一个问题并接收一个答案。

这很好用——但是当我再次尝试使用同一个套接字发送另一个问题时(不关闭套接字——在收到答案后),服务器没有得到第二个问题。

这是发送和接收答案的代码(这应该在某种循环中工作):

char* buf = "GET /count.htm HTTP/1.1\r\nHost: 127.0.0.1:666\r\nAccept: text/html,application/xhtml+xml\r\nAccept-Language: en-us\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/5.0\r\n\r\n";

int nBytesToSend= strlen(buf);
int iPos=0;

while(nBytesToSend)
{
    int nSent=send(hClientSocket,buf,nBytesToSend,0);
    assert(nSent!=SOCKET_ERROR);

    nBytesToSend-=nSent;
    iPos+=nSent;
}

//prepare buffer for incoming data
char serverBuff[256];
int nLeft=sizeof(serverBuff);
iPos=0;

do //loop till there are no more data
{
    int nNumBytes=recv(hClientSocket,serverBuff+iPos,nLeft,0);

    //check if cleint closed connection
    if(!nNumBytes)
        break;

    assert(nNumBytes!=SOCKET_ERROR);

    //update free space and pointer to next byte
    nLeft-=nNumBytes;
    iPos+=nNumBytes;

}while(1);
4

1 回答 1

0

使用此代码,您不可能发送第二个问题,因为您永远无法退出读取回复的循环(除非您因为偏移量溢出缓冲区而导致分段违规,或者当对等方关闭连接时,在这种情况下你不能发送,他也不能接收)。

仅仅断言没有错误是不够的。如果您遇到错误,您需要查看错误并做出相应的反应。至少你需要打印它。

于 2012-06-24T01:10:17.550 回答