【发布时间】:2016-08-11 02:07:48
【问题描述】:
我对自己的问题感到非常困惑和震惊。我使用套接字编写了一个多客户端服务器。
我创建了第一个 GUI,它接收客户端并在 gridview 中显示它们,在单击 gridview 事件中,它会打开一个新 GUI,其中包含单击的客户端和服务器之间的套接字。所以关于服务器和客户端之间连接的一切都进展顺利
但我的问题是:
它们之间的发送信息就像发送完整的过程一样,有时显示完整,有时结果较少。
发送文件管理,例如,当服务器请求目录中的完整文件夹/文件时,有时会显示全部,有时会显示较少的结果。
但是像打开一个窗口这样的命令打开一个网址,发送一条消息,这样的命令非常完美和即时。
我现在很困惑是什么问题
- 注意 1:我使用外部 IP 连接服务器/客户端。
- 注意 2:互联网连接完美(绝对不慢)
我尝试使用不同的缓冲区大小,但我真正感到困惑的是,有时结果会以特定的缓冲区大小填满,而有时却没有相同的缓冲区大小。
感谢您的宝贵时间!
【问题讨论】:
-
你使用了什么协议?请参阅,http 协议使用 Content-Length 进行数据包大小检测。您必须传输数据包大小信息,并首先读取数据包头(具有限制大小),然后再读取数据包的其他路径。
-
首先感谢您的回复,所以我使用流套接字类型和网卡的tcp我完全理解您的评论
-
必须先传输数据包长度。例如,参见 http 规范。
-
比如说我有一个函数可以传输所有已执行的进程,所以我需要先收集这些进程的所有大小,然后再发送它们?
-
是的,并且消息的大小也会添加到数据包中。例如:
struct S{ int size; char data[1] } s; send(s, datasize + sizeof(int)),则 datasize=Read(sizeof(int)) 和 Read(datasize)