Tcp发送或接收数据不全
2010-03-23 19:25
169 查看
最近在做项目时,在客户端先将发送的数据进行序列化,然后使用了Tcp进行发送数据,在服务器端进行接收,收到后进行反序列化。当发送的数据量大时,就会出现问题。当时百思不得其解。后来跟踪发送,原来数据并没有一次全部发送过来,而是分了几次发了过来,服务器接收到了多条数据。也就是说,客户端发送一条,服务器端会接收多条。后将程序进行一改良。测试成功。现将心得总结如下:
在使用Tcp进行发送数据时,如果数据量过大,则发送数据时不会一次全部发送过去。而是分成了多次进行发送。这时不能接收一次就进行处理,需将所有的数据都接收完成后再一次进行统一的处理。如果按这种方式进行处理,就需要在传送数据时在数据前加上一个数据的长度。根据数据的长度进行接收。接收时注意,每次对接收到的数据将数据最后的(不是所有的)’/0’去掉,因为在接收时网络流中的不一定填充满,它会将所返回的数据最后填充一大串’/0’,所以需要将接收到的数据最后的’/0’去掉。然后对其进行处理就不会出现问题了。
在使用Tcp进行发送数据时,如果数据量过大,则发送数据时不会一次全部发送过去。而是分成了多次进行发送。这时不能接收一次就进行处理,需将所有的数据都接收完成后再一次进行统一的处理。如果按这种方式进行处理,就需要在传送数据时在数据前加上一个数据的长度。根据数据的长度进行接收。接收时注意,每次对接收到的数据将数据最后的(不是所有的)’/0’去掉,因为在接收时网络流中的不一定填充满,它会将所返回的数据最后填充一大串’/0’,所以需要将接收到的数据最后的’/0’去掉。然后对其进行处理就不会出现问题了。
相关文章推荐
- TCP的接收缓冲区满了,收到数据后会向发送方发送ACK吗?该怎么解决
- C#使用Socket发送和接收TCP数据实例
- Android TCP/IP 发送接收16进制数据
- java 基于tcp客户端服务端发送接收数据
- Python3的tcp socket接收不定长数据包接收到的数据不全。
- java 简单的TCP接收数据与发送数据
- C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全
- TCP的数据发送和接收
- Linux TCP/IP 协议栈源码分析 - 数据 发送/接收 流程图
- Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- 如何使用TCP向远端SERVER传输数据 (发送与接收)
- TCP与UDP的异同(服务端接收数据,客户端发送数据)
- 通过异步方式发送和接收数据(tcp异步收发数据)
- Android TCP/IP 发送接收16进制数据
- 黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)
- Android客户端通过TCP接收服务器端发送的数据
- QT tcpsocket 发送/接收数据
- 真的懂了:TCP协议中的三次握手和四次挥手(关闭连接时, 当收到对方的FIN报文时, 仅仅表示对方不在发送数据了, 但是还能接收数据, 己方也未必全部数据都发送对方了。相当于一开始还没接上话不要紧,后来接上话以后得让人把话讲完)