在缓冲区内读取套接字上的整数

时间:2014-12-10 21:47:16

标签: c++ sockets buffer

我已将缓冲区声明为

char buffer[256];
从客户端的某个地方,我想用整数数组填充整个数字的缓冲区。 回到服务器代码,我将不得不逐个空格地读取缓冲区中的整数。

read(sock, buffer, 255);
int r = atoi(buffer);

这只会读取缓冲区中的第一个字符。任何建议我可以用于此吗?

1 个答案:

答案 0 :(得分:1)

使用TCP套接字,您不必通过一次调用recv来接收整个消息。您必须知道自己是否收到了整条信息。一种方法是将消息长度放在消息的开头。另一种方法是使用特殊字符(如\ n)终止ASCII消息。在接收端,您必须使用recv返回的计数,并查看收到的数据,以确定您是否还有整个消息。如果没有,那么您需要再次调用recv以获取更多消息。

您将收到的消息视为字符数组,但是在将它们传递给atoi(或任何其他C字符串函数)之前,必须先用nul终止字符数组:

buffer[received_length] = '\0';