【发布时间】:2019-07-10 20:28:03
【问题描述】:
我在这里有点困惑,说我这样做:
send(serverSocks, "Size: 1348", strlen("Size: 1348"), 0)
然后是这个:
send(serverSocks, "SomeDataThatIs1348LongAndThatNeedsToBeSent", strlen("SomeDataThatIs1348LongAndThatNeedsToBeSent"), 0)
由于它们是连续发送的,因此当我执行以下操作时,有可能只收到一件:
recv(clientSocks, buf, 2000, 0)
对吗?
我将如何从服务器端接收它? 还是我什至需要客户端先将大小发送到服务器?或者我可以在不知道大小的情况下接收整个数据?
编辑:
也许我需要让我的问题更清楚。我怎么知道这些数据是客户端发送的第一个(或第二个)数据的一部分?
【问题讨论】:
-
它是
TCP套接字吗?send(serverSocks, "Size: 1348", strlen("File Size: 1348", 0)没有意义。如果您可以编译,那将是未定义的行为,因为您将在字符串文字Size: 1348之后在内存中读取。 -
是的,它是一个tcp套接字,我编辑了代码,对不起。
-
我应该使用 sizeof() 吗?编辑:我再次编辑了代码,对不起。
-
TCP 是一种流协议。如果您想要比“八位字节序列”更多的结构,则需要在其之上实现自己的协议。
-
是的,这是有道理的,如果我喜欢,“客户端:大小是这样的”->“服务器:确认”->“客户端:发送数据”。这样,我可以确保客户端发送的所有消息都是另一条消息的一部分。艾