我收到以下声明:
char inbuff[500], *ptr;
int n, bufferlen;
编写程序段以从TCP套接字sock接收具有500位的消息,并将此消息存储在inbuff中。
我的回答是:
n = recv( sock, inbuff, strlen( inbuff ), 0 );
但是,我不确定为什么* ptr在声明中给出。
所以,我想问一下,这个问题中指针的目的是什么?
或者我的节目分段错了?
首先感谢你们所有人的帮助!
答案 0 :(得分:1)
recv
可以返回的数据少于您请求的数据 - 因此您需要将程序置于循环中,并使用p
指向更多数据的下一个位置,直到填满缓冲区。
在Linux中,有一个MSG_WAITALL
标志试图限制这种行为,但它并不完美:
MSG_WAITALL (since Linux 2.2)
This flag requests that the operation block until the full
request is satisfied. However, the call may still return less
data than requested if a signal is caught, an error or discon‐
nect occurs, or the next data to be received is of a different
type than that returned.
答案 1 :(得分:0)
您的代码片段有一些错误。正如James所说,你需要sizeof而不是strlen才能获得缓冲区的大小。但更重要的是,recv并不像你想象的那样工作。确保你完全明白它的保证。
答案 2 :(得分:0)
ptr可能没有用,但我会使用n = recv(sock, inbuff, 500, 0);
,因为strlen(inbuff);
不一定是500;