通过socket传输数据的时候遇到问题。模式:一服务器对多客户端;遇到的问题刚开始感觉有点奇怪,有时正确有时又出错,而且出错的场合也不可捉摸,大致测试了下,猜测过如下可能性:
先是感觉群发可以,单点发送不行
后来发现是有线网可以,无线网不行
再发现是大数据不行,小数据包可以
最后记录在发送端和接收端 数据传输的报文,发现问题是:
在接收端时,TCP数据读取不完全时,就开始解析了,导致协议报文解析错误
靠。
有线网时,速度快,发送大数据报文也可以。
而无线网上面,速度慢,数据发送有较长的时间间隔,所以,数据片读取不完全的情况发生概率高多了。
以流形式传输时,发送端的多次发送可能会被一次接收;
一次发送也可以被多次读取。
比如
发送端发送三个报文:
1.AAAAAAAAAAAAAAAAAAAAAAAAAAAA
2.BBBBBBBBBBBBBBBBBBBBBBBBBBBB
3.CCCCCCCCCCCCCCCCCCCCCCCCCCCC
接收端可能会以不同的形式接收:
可能被一次接收:
AAAAAAAAAAAAAAAAAAAAAAAAAAAABBB<wbr></wbr>BBBBBBBBBBBBBBBBBBBBBBBBBCCCCCC<wbr></wbr>CCCCCCCCCCCCCCCCCCCCCC
可能被两次接收:
报文1.AAAAAAAAAAAAAAAAAAAAAAAAAAA<wbr></wbr>ABBBBBBBBBBBBBBB
报文2.BBBBBBBBBBBBBCCCCCCCCCCCCCC<wbr></wbr>CCCCCCCCCCCCCC
可能被三次接收:
报文1.AAAAAAAAAAAAAAAAAAAAAAAAAAA<wbr></wbr>A
报文2.BBBBBBBBBBBBBBBBBBBBBBBBBBB<wbr></wbr>B
报文3.CCCCCCCCCCCCCCCCCCCCCCCCCCC<wbr></wbr>C
也可能被四次接收:
报文1.AAAAAAAAAAAAAAAAAAAAAAA
报文2.AAAAABBBBBBBBBBBBBBBBBB
报文3.BBBBBBBBBBCCCCCCCCCCCCC
报文4.CCCCCCCCCCCCCCC
等等。
以流形式,会被任意拆分,因此应用程序,需要对数据进行截分处理。
而原本我的错误理解是:
接收端只可能会被以如下形式接收:分三次接收
第一次接收报文1.AAAAAAAAAAAAAAAAAAAAAAAAAAA<wbr></wbr>A
第二次接收报文2.BBBBBBBBBBBBBBBBBBBBBBBBBBB<wbr></wbr>B
第三次接收报文3.CCCCCCCCCCCCCCCCCCCCCCCCCCC<wbr></wbr>C
理解完全错误。又由于后面的报文解析没有完善的出错处理,导致程序行为不可理解。因此感觉这个错误神秘兮兮。
是这样的麼?
至少测试结果展现出来就是这样的。
分享到:
相关推荐
在这个"LabVIEWLabView TCP数据传输.rar"压缩包中,我们可以推测其内容可能涉及如何在LabVIEW中实现TCP(Transmission Control Protocol)数据传输。TCP是一种广泛使用的网络协议,用于在网络中可靠地传输数据。 在...
网络通信中难免会遇到网络中断、数据丢失等问题。使用Boost.ASIO,开发者可以设置超时、重试和错误处理策略,确保文件传输的可靠性。 5. **性能优化** 为了达到10MB/s的速度,可能需要优化缓冲区大小、多线程处理...
在实际应用中,这样的TCP文件传输服务器可能会进一步优化,比如支持断点续传、多线程处理多个客户端请求、加密传输以保护数据安全,或者使用更高级的协议如FTP或HTTP进行文件上传。此外,为了提高性能,还可以考虑...
通过这个实验,学生可以学习到如何利用Winsock控件实现文件的可靠传输,以及解决实际网络环境中可能遇到的问题,如网络中断和数据完整性。 总的来说,这个实验报告详细介绍了基于TCP的文件传输系统的设计与实现,...
在TCP通信中,数据通常以字节流的形式传输。C#提供了BinaryReader和BinaryWriter类,它们可以方便地将各种类型的数据转换为字节流,反之亦然。创建这两个类的实例,关联到NetworkStream,即可进行数据的读写操作。...
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,广泛应用于网络编程,包括文件传输。WinForm是.NET Framework提供的一种用于构建桌面应用程序的用户界面框架。 首先...
然后,发送端根据当前每条路径往返时延进行MPTCP数据流调度:对于短流,选择往返时延最小的若干条路径进行数据流传输;对于长流,使用所有的路径进行数据流传输。 MPTCP-FSFS算法的主要思想是根据数据流的特性对其...
TCP(Transmission Control Protocol)传输控制协议是互联网上最常用的一种通信协议之一,它提供了一种可靠的、面向连接的字节流服务。在TCP协议中,数据被分成多个数据段进行传输,并通过序列号、确认应答、重传...
TCP是一种面向连接的协议,它提供了可靠的、基于字节流的数据传输服务。TCP通过三次握手建立连接,确保双方都准备好通信。在文件传输过程中,TCP会保证数据的顺序和完整性,如果数据在传输过程中丢失或损坏,TCP会...
2. **文件分块**:由于TCP传输的是数据流,大文件需要被分割成若干小块,每一块作为一个单独的数据段进行传输,以便于控制和管理。 3. **文件传输控制**:客户端需要告知服务器要传输的文件名,服务器需要根据...
基于TCP/IP的数字实时视频流网络传输是一种在教育、国防、公共安全等领域广泛应用的技术。随着视频信号的数字化,数据量显著增加,例如,一个D1(704×576)PAL制的视频,以25帧/秒的帧率和YUV4:2:2格式转换为数字...
4. **数据流操作**:图像数据通常通过`NetworkStream`对象进行传输,它是`TcpClient`和`TcpListener`的成员,提供了读写二进制数据的方法。例如,`NetworkStream.Write()`用于发送数据,`NetworkStream.Read()`用于...
在IT领域,网络通信是至关重要的部分,...虽然存在一些文件格式问题,但通过深入理解TCP/IP协议和LabVIEW的网络编程,这些问题是可以解决的。对于希望扩展或改进此功能的开发者来说,这是一个很好的学习和实践平台。
在C#编程中,TCP(Transmission Control Protocol)是一种常用的数据传输协议,用于在网络应用程序之间建立可靠的、基于字节流的连接。当需要发送大量数据时,可能会遇到各种问题,如缓冲区溢出、数据丢失或连接中断...
在IT领域,网络通信是至关重要的部分,而TCP(传输控制协议)作为面向连接的、可靠的传输协议,常被用于长数据,如图片的传输。本主题将深入讲解如何利用TCP Socket编程实现自定义数据帧进行长数据传输,特别是图片...
在C#编程环境中,开发基于TCP协议的文件传输软件是一项常见的任务,这通常涉及到使用`TcpClient`和`TcpListener`类以及网络流的概念。这两个类是.NET Framework提供的,用于实现客户端和服务器之间的TCP通信。下面...
在IT行业中,网络通信是至关重要的一个领域,TCP(Transmission Control Protocol)作为其核心协议之一,为数据的可靠传输提供了保障。"TCP大文件批量传输"这个话题涉及到如何高效、稳定地通过TCP协议来发送大量大...
Darwin Streaming Server (DSS) 是一个开源的流媒体服务器,它支持 RTSP 协议,并能根据客户端的需求自动选择 TCP 或 UDP 进行数据传输。VLC 作为客户端,不仅支持 RTSP over TCP,也支持 RTSP over UDP,因此可以...
通过此项目,我们可以了解多连接情况下TCP和UDP的运行性能与特点,从而在实际的应用中合理分配混合数据流的TCP和UDP的连接数,从而提高数据流的传输性能,充分利用有限的带宽,提高传输效率。 1.3 项目创新分析 该...