SFML tcp 服务器接收带有附加信息的消息
SFML tcp server recieves messages with additionals
我使用 SFML2.3.1 包中的服务器示例代码。如果我从任何其他应用程序(TCP 客户端)发送消息,我将收到如下屏幕所示的附加消息:http://s21.postimg.org/yh0r0c0cn/example.jpg
您正在打印您未收到的数据。记录您收到的字节数,您会发现它少于您打印的字节数。
您的代码可能如下所示:
int i = recv (sockfd, buf, sizeof(buf));
printf ("Got: %s\n", buf);
注意到 i
的值没有被使用?那么 printf
应该如何知道要打印多少字节?
请注意,这可能只是冰山一角。 TCP 不是消息协议,但你认为你在发送消息。这可能表明未能真正设计和实现消息协议,这是不熟悉 TCP 的人常犯的错误。 TCP 是一种字节流协议。如果你想要一个消息协议,你必须在上面实现一个。
您打印的字节数可能比接收到的多。如果你使用 TcpSocket 的接收,它需要第三个参数引用 size_t 这样你就可以知道你得到了多少数据。检查 this
我使用 SFML2.3.1 包中的服务器示例代码。如果我从任何其他应用程序(TCP 客户端)发送消息,我将收到如下屏幕所示的附加消息:http://s21.postimg.org/yh0r0c0cn/example.jpg
您正在打印您未收到的数据。记录您收到的字节数,您会发现它少于您打印的字节数。
您的代码可能如下所示:
int i = recv (sockfd, buf, sizeof(buf));
printf ("Got: %s\n", buf);
注意到 i
的值没有被使用?那么 printf
应该如何知道要打印多少字节?
请注意,这可能只是冰山一角。 TCP 不是消息协议,但你认为你在发送消息。这可能表明未能真正设计和实现消息协议,这是不熟悉 TCP 的人常犯的错误。 TCP 是一种字节流协议。如果你想要一个消息协议,你必须在上面实现一个。
您打印的字节数可能比接收到的多。如果你使用 TcpSocket 的接收,它需要第三个参数引用 size_t 这样你就可以知道你得到了多少数据。检查 this