有时候100个客户端同时发送数据,收到的数据有时显示正常,有时候将95号客户端的显示两次,96号客户端的没显示,这个只是只要连接成功了发送数据后就直接断开的的测试程序,虽然说buff是同一个,但是我想知道原因到底在哪

解决方案 »

  1.   

    1.服务端accept一个client后  不能使用同一个buffer接收数据  
    2.数据接收返回后,buffer不一定是完整的数据
      

  2.   

    对于1这个我这是想简单的测试下,避免紊乱我可以为每个连接上的对象new一个buff,用完销毁丢到Socket字典中的, 2现在只假设一下数据流小于1024,这样数据会是完整的,但是有的数据出现多次,有的数据不出现这个问题实在不知道到底是为什么出现的
      

  3.   

    对于1这个我这是想简单的测试下,避免紊乱我可以为每个连接上的对象new一个buff,用完销毁丢到Socket字典中的, 2现在只假设一下数据流小于1024,这样数据会是完整的,但是有的数据出现多次,有的数据不出现这个问题实在不知道到底是为什么出现的
    1这是为了测试什么? 所有的连接往一个缓冲区中写数据  什么结果  
      

  4.   

    如果前后两个连接数据同时到达 写入缓冲区后 就会覆盖  总有一个连接的EndReceive()不会返回 或者返回了 size也为零
    你不要以为客户端按顺序先后登录发送数据  它们到达服务器的顺序就是一定是先后顺序的  所以buffer用同一个没事儿  不一定
      

  5.   

    到达服务器的这个顺序确实是未知的,
    看样子C# OnDatarecv回调 + EndReceive对于批量并发共用一段缓冲区还是不靠谱的,那我还是改成每个Socket自带缓冲区的吧,这样这个问题确实是没了
      

  6.   

    对clientArray 操作不是多线程安全的
      

  7.   

    clientArray  add remove 时 lock试试
      

  8.   

    到达服务器的这个顺序确实是未知的,
    看样子C# OnDatarecv回调 + EndReceive对于批量并发共用一段缓冲区还是不靠谱的,那我还是改成每个Socket自带缓冲区的吧,这样这个问题确实是没了
    从来都不应该这样用