C#Socket异步通信在处理批量并发时有时出现数据重叠 有时候100个客户端同时发送数据,收到的数据有时显示正常,有时候将95号客户端的显示两次,96号客户端的没显示,这个只是只要连接成功了发送数据后就直接断开的的测试程序,虽然说buff是同一个,但是我想知道原因到底在哪 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.服务端accept一个client后 不能使用同一个buffer接收数据 2.数据接收返回后,buffer不一定是完整的数据 对于1这个我这是想简单的测试下,避免紊乱我可以为每个连接上的对象new一个buff,用完销毁丢到Socket字典中的, 2现在只假设一下数据流小于1024,这样数据会是完整的,但是有的数据出现多次,有的数据不出现这个问题实在不知道到底是为什么出现的 对于1这个我这是想简单的测试下,避免紊乱我可以为每个连接上的对象new一个buff,用完销毁丢到Socket字典中的, 2现在只假设一下数据流小于1024,这样数据会是完整的,但是有的数据出现多次,有的数据不出现这个问题实在不知道到底是为什么出现的1这是为了测试什么? 所有的连接往一个缓冲区中写数据 什么结果 如果前后两个连接数据同时到达 写入缓冲区后 就会覆盖 总有一个连接的EndReceive()不会返回 或者返回了 size也为零你不要以为客户端按顺序先后登录发送数据 它们到达服务器的顺序就是一定是先后顺序的 所以buffer用同一个没事儿 不一定 到达服务器的这个顺序确实是未知的,看样子C# OnDatarecv回调 + EndReceive对于批量并发共用一段缓冲区还是不靠谱的,那我还是改成每个Socket自带缓冲区的吧,这样这个问题确实是没了 对clientArray 操作不是多线程安全的 clientArray add remove 时 lock试试 到达服务器的这个顺序确实是未知的,看样子C# OnDatarecv回调 + EndReceive对于批量并发共用一段缓冲区还是不靠谱的,那我还是改成每个Socket自带缓冲区的吧,这样这个问题确实是没了从来都不应该这样用 求助:抽象类中如何赋值 RDLC报表如何取出表达式的第n个值 如何查看LinqDataSource在执行新增或更新时执行的SQL语句 简单的代码改写,希望有人能帮一下. c#如何执行外部程序 类似 delphi的shell(cmd.exe) 如何用C#开发电子图章,HELP????? 菜鸟请教C#将数据录入到数据库的问题 用c#实现导出服务器数据库数据 WebClient卡死 Visual Studio.Net 正式版 测试报告!!! 求助:VS2010编译器正常设置,但是却不抛出异常 第一次执行socket.Receive()的耗时很长,什么原因?(帮忙看一下程序)
2.数据接收返回后,buffer不一定是完整的数据
1这是为了测试什么? 所有的连接往一个缓冲区中写数据 什么结果
你不要以为客户端按顺序先后登录发送数据 它们到达服务器的顺序就是一定是先后顺序的 所以buffer用同一个没事儿 不一定
看样子C# OnDatarecv回调 + EndReceive对于批量并发共用一段缓冲区还是不靠谱的,那我还是改成每个Socket自带缓冲区的吧,这样这个问题确实是没了
看样子C# OnDatarecv回调 + EndReceive对于批量并发共用一段缓冲区还是不靠谱的,那我还是改成每个Socket自带缓冲区的吧,这样这个问题确实是没了
从来都不应该这样用