gpt4 book ai didi

c++ - 如何正确读取套接字消息 (C++)

转载 作者:行者123 更新时间:2023-11-30 03:54:26 25 4
gpt4 key购买 nike

我正在使用这个服务器代码:

     [...]
while(1){
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0) error("ERROR reading from socket");
cout << "Message " << buffer << n << endl;
}
[...]

在客户端,除其他外,我有(这是 Java):

out.writeUTF("MOVE");

这一行重复了好几次。但是,当我这样做时,我得到的输出是:

Message 6

所以 n 是正确的,但是缓冲区是空的。

我也试过:

out.writeBytes("MOVE");

有时我会这样:

Message MOVE4

但有时我会这样:

Message M1
Message O1
Message V1
Message E1

那么,我能做什么呢?非常感谢。

最佳答案

根据documentation of the POSIX read function :

If fildes refers to a socket, read() shall be equivalent to recv() with no flags set.

documentation of recv说了以下内容

For stream-based sockets, such as SOCK_STREAM, message boundaries shall be ignored. In this case, data shall be returned to the user as soon as it becomes available, and no data shall be discarded.

因此您应该准备好接收不完整的数据(在调用一次读取之后)或使用基于消息的套接字。处理不完整数据的可能方法是传递消息大小或使用特殊值(例如 NUL 字符)来标记消息结束。

关于c++ - 如何正确读取套接字消息 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29521467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com