我有一个客户端/服务器应用程序。 客户端向服务器发送问题并收到答复。
这很好 - 但是当我试图再次使用相同的套接字发送另一个问题(没有关闭套接字 - 收到答案后)服务器没有得到第二个问题。
这是发送和接收答案的代码(这应该在某种循环中工作):
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);
答案 0 :(得分:0)
使用此代码,您无法发送第二个问题,因为您永远无法离开读取回复的循环(除非因为您的偏移量溢出而导致分段违规缓冲区,或者当对等方关闭连接时,在这种情况下你无法发送,他也无法接收。)
只是断言没有错误是永远不够的。如果您收到错误,您需要查看相应内容并做出相应反应。至少你需要打印它。