我已将缓冲区声明为
char buffer[256];
从客户端的某个地方,我想用整数数组填充整个数字的缓冲区。
回到服务器代码,我将不得不逐个空格地读取缓冲区中的整数。
read(sock, buffer, 255);
int r = atoi(buffer);
这只会读取缓冲区中的第一个字符。任何建议我可以用于此吗?
答案 0 :(得分:1)
使用TCP套接字,您不必通过一次调用recv来接收整个消息。您必须知道自己是否收到了整条信息。一种方法是将消息长度放在消息的开头。另一种方法是使用特殊字符(如\ n)终止ASCII消息。在接收端,您必须使用recv返回的计数,并查看收到的数据,以确定您是否还有整个消息。如果没有,那么您需要再次调用recv以获取更多消息。
您将收到的消息视为字符数组,但是在将它们传递给atoi(或任何其他C字符串函数)之前,必须先用nul终止字符数组:
buffer[received_length] = '\0';