社区
C#
帖子详情
Tcp 通信中用Socket发送数据为什么会重复。
weishenmefengshawo
2010-09-19 04:59:16
在程序中用了多线程socket编程,很奇怪在用Socket.send(byte[] data)方法时,会连续发送出两个或者三个data数据。这会不会跟发送缓存有什么关系啊?
...全文
1053
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
通信
socket
通信
_
TCP
TCP
面向字节流传输数据,提供可靠的数据传输服务。通过
TCP
传送的数据无差错、不丢失、不重 复,而且按序到达。由于
TCP
是基于连接的,所以每一条
TCP
连接只能是点到点的交互
通信
。 服务器端初始化Winsock环境后,便调用
Socket
函数创建流式套接字;然后对sockaddr_in结构体进行设 置,设置服务器绑定的IP地址和端口等信息并调用 bind函数来绑定;绑定成功后,就可以调用listen函数设 置连接数量,并进行监听。直到有来自客户端的连接请求,服务器便调用accept函数
Android中
Socket
通信
,
TCP
、UDP
一、简介
Socket
定义:端口号拼接到IP地址即构成了套接字(
Socket
)。
Socket
的表示方法就是,在点分十进制的IP地址后面写上端口号,例如(127.0.0.1:8888)。 OSI定义了网络互连的七层模型(物理层、数据链路层、网络层、传输层、
会
话层、表示层、应用层)。
TCP
/IP四层模型(链路层、网络层、传输层、应用层)
socket
通信
是基于
TCP
/IP 网络层上的一种传送方式,我们通常把
TCP
和UDP称为传输层。 ...
Java 基于
TCP
的
Socket
编程
服务器端
会
主动监听某个指定的端口,客户端必须主动连接服务器的 IP 地址和指定端口,如果连接成功,服务器端和客户端就成功地建立了一个
TCP
连接,双方后续就可以随时发送和接收数据。
TCP
协议,指传输控制协议(
TCP
,Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层
通信
协议。注意:服务端需要先于客户端启动,否则客户端因连接不到指定的进程而报错。实际场景中,一个服务端往往可以支持多个客户端的连接,为多个客户端提供服务。
Socket
套接字(实现
TCP
和UDP的
通信
)
Socket
套接字,是由系统提供用于网络
通信
的技术,是基于
TCP
/IP协议的网络
通信
的基本操作单元。基于
Socket
套接字的网络程序开发就是网络编程。换句话说,一个
Socket
由一个IP地址和一个端口号唯一确定,利用
Socket
能比较方便的实现两端的网络
通信
。
基于
TCP
协议的
Socket
通信
(1)
Android 基于
TCP
协议的
Socket
通信
实现指南 本文详细介绍了在 Android 应用中实现基于
TCP
协议的
Socket
通信
方法。主要内容包括:
TCP
协议特点:面向连接、可靠性高、流式传输,适合实时聊天、文件传输等场景
通信
流程:客户端通过
Socket
连接服务器,服务器通过 Server
Socket
监听端口并建立连接 Android 环境配置:需要声明网络权限、检查网络状态,并使用异步线程处理网络操作 代码实现示例: 客户端:创建
Socket
连接,通过输入输出流收发数
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章