社区
C#
帖子详情
c# socket/tcp发送消息太快时就会丢数据,请各位给个思路
joe51586
2010-12-31 02:10:12
我客户端使用TcpClient,服务端使用异步Socket接收数据。
客户端如果每发一条sleep(1)的话,客户端发多少,服务端就收多少,但如果我每次发3条以上再 sleep(1)一次的话,服务端总会少几条数据,,不知道这是为什么,全过程也没有任何地方报错。
请各位懂的人给个调试思路啊。。。
另备注:客户端和服务端的发送与接收缓冲区均设置的1024*32,每次发送的数据包也很小。
...全文
1545
8
打赏
收藏
c# socket/tcp发送消息太快时就会丢数据,请各位给个思路
我客户端使用TcpClient,服务端使用异步Socket接收数据。 客户端如果每发一条sleep(1)的话,客户端发多少,服务端就收多少,但如果我每次发3条以上再 sleep(1)一次的话,服务端总会少几条数据,,不知道这是为什么,全过程也没有任何地方报错。 请各位懂的人给个调试思路啊。。。 另备注:客户端和服务端的发送与接收缓冲区均设置的1024*32,每次发送的数据包也很小。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
人到中年琐事多
2010-12-31
打赏
举报
回复
MS就是这个套话,我都会背下来了
凡是静态方法,都是线程安全的,凡是实例成员,都不能保证一定是线程安全的
kid_wang
2010-12-31
打赏
举报
回复
MSDN上课没说List<T>是线程安全的,下面是上面的原话
此类型的公共静态(在 Visual Basic 中为 Shared)成员是线程安全的。但
不保证
所有实例成员都是线程安全的。
只要不修改该集合,List<T> 就可以同时支持多个阅读器。枚举整个集合本质上
不是
一个线程安全的过程。在枚举与一个或多个写访问竞争的罕见情况下,确保线程安全的唯一方法是在整个枚举期间
锁定集合
。若允许多个线程对集合执行读写操作,您必须实现自己的同步。
joe51586
2010-12-31
打赏
举报
回复
楼上的朋友,我已经找出问题了。
现在的问题是,加了读写锁以后,如果让消息读出的速度更快些。
如果不加锁,又如何保障读写不会出错。
一切都是为了速度,为了更快些~~
evolve724
2010-12-31
打赏
举报
回复
确定是丢失吗
一般是所谓的TCP “粘包" 现象吧
joe51586
2010-12-31
打赏
举报
回复
经过几个小时的折腾,终于得出结论。
发现不将消息队列锁住它就会出现一个意向不到的事情,List<T>官方说是线程安全的,不过好像并不安全呀。
我是用List泛型做消息队列,因为官方说它是安全的,我就将消息锁注释了,有高频率的消息插出和取出的时候 list[0]的位置的消息不一定是事实上的第一个对象。MS真是整人啊!!!
换上消息锁之后,运行效率变低了,每秒只能处理2500条消息了,相当不爽哎。
CGabriel
2010-12-31
打赏
举报
回复
装个网络抓包软件,例如 wireshark,对比一下你的服务端接受到的内容。。
你就一定会发现,所谓的“丢失”数据,只是你的服务端自己把数据主动扔掉而已。
SoftwareHunter
2010-12-31
打赏
举报
回复
不太清楚你的需求。瞎说一下
试试读写锁
joe51586
2010-12-31
打赏
举报
回复
to kid_wang
嗯,我看得不认真,呵呵。
您有什么办法让消息队列在进与出的时候,速度更快些吗?
C#
TCP
通讯(
Socket
s)
C#
TCP
通讯
Socket
s引言什么是
TCP
[^1]
C#
TCP
服务端
思路
C#
TCP
服务端程序示例
C#
TCP
客户端
思路
C#
TCP
客户端程序示例 引言 最近在学习
TCP
通讯方面知识,网上看了很多资料,很多零零散散,在这里做一个总结汇总,也是对自己最近学习的一个总结。. 什么是
TCP
1
TCP
协议(Transmission Control Protocol,传输控制协议)是
TCP
/IP体系中面向连接(connection oriented)的传输层(transport layer),
TCP
协议能够检测
C#
Socket
网络编程实战:从零构建
TCP
聊天应用
Socket
是网络编程的基础,它提供了操作系统级别的网络通信接口,允许不同主机上的进程进行
数据
交换。其核心原理是通过IP地址和端口号建立连接,在传输层实现可靠的
数据
传输。在
C#
开发中,
Socket
编程对于理解网络通信机制、构建实
时
应用具有重要价值,尤其适用于需要高性能、低延迟的场景,如即
时
通讯、游戏服务器和物联网设备通信。本文聚焦于
TCP
Socket
,通过一个完整的聊天应用示例,深入讲解异步编程模型和
TCP
粘包处理等关键技术,帮助开发者掌握网络编程的核心要点。
Socket
通讯-
C#
客户端与Java服务端通讯(
发送
消息
和文件)
项目目的实现
C#
客户端向Java服务端
发送
消息
以及文件的功能设计
思路
使用
Socket
通讯,客户端采用
C#
开发界面,服务端使用Java开发,最终实现向服务端
发送
文件和
消息
的功能。
Unity中
C#
Socket
网络通信模块深度解析与实战
APM 是 .NET 早期提供的一套标准异步编程接口,其核心思想是“发起异步操作 + 回调通知”。该模型广泛应用于包括文件读写、
数据
库访问以及网络通信在内的多种 I/O 场景中。在类中,所有以BeginXXX开头的方法均遵循此模式,其中最典型的就是BeginSend和。创建专用类来封装异步操作所需的所有上下文:set;set;set;} = new();set;set;} // 自定义业务标签使用方式如下:state// 流式解析// 继续监听。
HP-
Socket
国产优秀
socket
通信组件推荐
* HP-
Socket
官方网站:http://www.jessma.org * HP-
Socket
项目主页:http://www.oschina.net/p/hp-
socket
* HP-
Socket
开发文档:http://www.oschina.net/p/hp-
socket
/doc *HP-
Socket
源代码下载地址:https://github.com/ldcsaa/HP-
C#
111,129
社区成员
642,531
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章