社区
C#
帖子详情
Tcp 通信中用Socket发送数据为什么会重复。
weishenmefengshawo
2010-09-19 04:59:16
在程序中用了多线程socket编程,很奇怪在用Socket.send(byte[] data)方法时,会连续发送出两个或者三个data数据。这会不会跟发送缓存有什么关系啊?
...全文
1054
10
打赏
收藏
Tcp 通信中用Socket发送数据为什么会重复。
在程序中用了多线程socket编程,很奇怪在用Socket.send(byte[] data)方法时,会连续发送出两个或者三个data数据。这会不会跟发送缓存有什么关系啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xu_2007
2010-09-21
打赏
举报
回复
[Quote=引用楼主 weishenmefengshawo 的回复:]
在程序中用了多线程socket编程,很奇怪在用Socket.send(byte[] data)方法时,会连续发送出两个或者三个data数据。这会不会跟发送缓存有什么关系啊?
[/Quote]
这位朋友悟性蛮高的啊,就是你设置应用层缓冲区的问题,比如你设置你的应用层的接收缓冲区大小为:1024,但你现在发送的字节数组为:2048,那么就会接收两次!
足球中国
2010-09-20
打赏
举报
回复
Tcp 通信中用Socket发送数据为什么会重复
tcp的原理就是这个。
还有一个就是你的接收缓存小了。
mooniscrazy
2010-09-20
打赏
举报
回复
加log,确定这个send方法的确只被调用了一次。我觉得应该是代码的问题。跟缓冲区大小没有关系。缓冲区大小仅仅影响性能,不会影响代码的逻辑。
xu_2007
2010-09-20
打赏
举报
回复
1.粘包所至,2。缓冲区定义问题(客户端应用层缓冲区是否定义的比服务端应用层缓冲区大,这样的话你如果按缓冲区大小取字节的话就会出现这种不够则重新把开始的字节补齐的问题)
大黄鸭在发光
2010-09-20
打赏
举报
回复
我觉得应该是程序问题。是不是多线程socket发送造成的。设个全局计数器。socket只发这个计数器内容。发送完后计数器++。
wenbin
2010-09-19
打赏
举报
回复
发送数据data复制一下再发送
weishenmefengshawo
2010-09-19
打赏
举报
回复
up up up
weishenmefengshawo
2010-09-19
打赏
举报
回复
[Quote=引用 2 楼 wangyue4 的回复:]
tcp有粘包的。假如你发的abcde。可能第一次接收到的是ab,然后第二次接收cde。也就是他一次接收的长度不一定,有可能小于你发送的byte[]长度。接收端需要循环接收的。
如果你的代码逻辑没有问题的话根据你的描述应该就是这种可能了
[/Quote]
但现在我的问题是 发一个abc ,客户端收到的是两个abc或者有时三个。从客户端收到数据的情况来看,不像发送了两次或者三次(即不像调用了两三次send()方法),因为这几个abc几乎都是同时收到的。所以我觉得应该是调用了一次send()方法,结果发送了好几个abc
大黄鸭在发光
2010-09-19
打赏
举报
回复
tcp有粘包的。假如你发的abcde。可能第一次接收到的是ab,然后第二次接收cde。也就是他一次接收的长度不一定,有可能小于你发送的byte[]长度。接收端需要循环接收的。
如果你的代码逻辑没有问题的话根据你的描述应该就是这种可能了
weishenmefengshawo
2010-09-19
打赏
举报
回复
望高手们提出各种可能性的解决办法
c语言实现
TCP
socket
通信
本文介绍了如何使用C语言在Windows环境下实现
TCP
Socket
通信
。
TCP
提供可靠的数据传输,确保数据无差错、不丢失、不
重复
且有序到达。服务器端通过初始化Winsock、创建套接字、绑定IP和端口、监听连接,接受客户端请求后进行数据收发。客户端则通过创建套接字、连接服务器、收发数据,
通信
完毕后关闭套接字释放资源。
Android中
Socket
通信
,
TCP
、UDP
本文介绍了Android中
Socket
通信
的基础,详细讲解了
TCP
的三次握手与四次挥手过程,对比了
TCP
与UDP的主要区别,并提供了基于
TCP
和UDP的
Socket
基本实现示例。
Java 基于
TCP
的
Socket
编程
本文介绍了
TCP
协议的基本概念,包括其可靠性、有序性、流量控制和拥塞控制等特点。
Socket
作为网络
通信
的接口,用于创建连接并传输数据。通过示例展示了如何使用Java进行简单的
TCP
网络编程,包括创建服务端和客户端,以及如何实现服务端支持多个客户端连接的多线程处理。
Socket
套接字(实现
TCP
和UDP的
通信
)
本文详细介绍了
Socket
套接字
通信
,包括
TCP
和UDP的区别,以及它们在编程中的应用。重点讲解了
TCP
流套接字编程、UDP数据报套接字编程,涉及
TCP
和UDP的缓冲区机制,以及全双工
通信
的概念。
基于
TCP
协议的
Socket
通信
(1)
本文详细介绍基于
TCP
协议的
Socket
通信
在Android平台的实现方法,涵盖
TCP
特性、
Socket
通信
流程、Android网络权限配置、异步处理机制及客户端与服务器代码示例。重点讲解使用Kotlin协程进行高效异步
通信
,并指出常见问题如主线程网络限制、连接超时和资源泄漏的解决方案,适合初学者快速掌握移动端
TCP
通信
基础。
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章