我正在使用 linux 下的 Berkely SOCKET API 编写 TCP 服务器。现在客户端有一组规范,客户端发送的每个消息都基于这些规范,即从客户端发送的消息对应于规范指定的许多结构中的一个。现在的情况是服务器不知道客户端将在什么时间发送哪条消息。一旦我们得到消息,我们就可以弄清楚它是什么,但在此之前就不行了。客户端发送的消息长度可变,因此我们无法提前知道我们将收到什么消息。为了解决这个问题,我使用了以下方法:
const char *buf[4096] = { 0 };
if ( recv (connected, buf, 4096, 0) == -1)
{
printf ("Error in recvng message\n");
exit (-1);
}
那就是我使用大小为 4096 的默认缓冲区(来自客户端的任何消息都不能大于此大小)。在该缓冲区中接收,然后我检查消息类型并采取相应的操作,如下所示:
struct ofp_header *oph;
oph=(struct ofp_header *)buf;
switch (oph->type)
{
case example_pkt:
handle_example_pkt();
break;
}
这很好用,但我只是想确认这是一种合适的方法,还是有比这更好的方法。非常感谢所有帮助。
谢谢。