c#套接字发送接收网络
我对自己的问题感到困惑和震惊。我使用套接字编写了一个多客户端服务器 我创建了第一个接收客户端并在gridview中显示它们的GUI,在click gridview事件中,它打开了一个新的GUI,其中包含单击的客户端和服务器之间的套接字。因此,服务器和客户机之间的连接一切进展顺利,速度也很快 但我的问题是:c#套接字发送接收网络,c#,sockets,C#,Sockets,我对自己的问题感到困惑和震惊。我使用套接字编写了一个多客户端服务器 我创建了第一个接收客户端并在gridview中显示它们的GUI,在click gridview事件中,它打开了一个新的GUI,其中包含单击的客户端和服务器之间的套接字。因此,服务器和客户机之间的连接一切进展顺利,速度也很快 但我的问题是: 它们之间的发送信息就像发送完整的过程,有时显示完整,有时显示较少的结果 发送文件管理—例如,当服务器请求目录中的完整文件夹/文件时,有时会显示所有文件夹/文件,有时会显示较少的结果 但是像这样
- 注意1:我使用外部IP连接服务器/客户端
- 注意2:互联网连接是完美的(绝对不慢)
谢谢你抽出时间 我还建议您使用wireshark,这样您就能够获得网络中真实发生的全部信息和交易 这将帮助您排除问题的来源 要确定数据包大小,请参见图像 这里我不是说TCP握手协议是如何工作的,因为我假设它正在工作。但是请注意,在传输中,如果您看到类似RST的内容,则可能有人发出了重置命令,这意味着传输中发生了错误。例如,由于校验和的原因。尽管对于直接使用TCP/IP协议的人来说,这通常是一个问题
这将帮助您确认发送和接收的长度正确 你使用了什么协议?请参阅,http协议使用内容长度来检测数据包大小。您必须传输数据包大小信息,并首先读取数据包头(限制大小),而不是数据包的其他路径。首先感谢您的回复,因此我使用tcp与流套接字类型和互联网卡。我不完全理解您的评论。您必须先传输数据包长度。例如,请参阅http规范。假设我有一个函数,可以传输所有已执行的进程,因此我需要先收集这些进程的所有大小,然后再发送?是的,消息的大小也会添加到数据包中。例如:
struct S{int size;char data[1]}S;发送(s,datasize+sizeof(int))
,然后datasize=Read(sizeof(int))和Read(datasize)Hi,你能描述一下他是如何检测数据包大小的吗?嗨,我已经更新了我的答案。请问我任何问题,如果你有任何问题,我可以帮助。如果你喜欢我的答案,也请给我一张赞成票!