问题描述
C#代码如下,客户端并发大概几百,以下代码会造成数据丢失吗?怎么呢保证完整接收数据呢,服务器端要求按照4个字节接收,按照我自己写的代码,循坏次数太多导致效率低下,怎么修改代码呢?List<byte> listByte = new List<byte>();//装载接收到的数据byte[] bytes;if (listByte.Count != 0){ listByte.Clear(); } while (true) { bytes = new byte[1024]; int length = clientSocket.Receive(bytes); for (int i = 0; i < length; i++) { listByte.Add(bytes[i]);//如果length很大(很有可能大于1000),效率很差,怎么修改呢 } if (length == 0)//当接收到的数据长度为0时,表示数据接收完毕 break; }
解决方案
解决方案二:
光从这一小段接收数据的代码就能看出很多问题,这段代码应该是根据网上一些socket演示的例子改的吧,从socket创建到结束都写在了一起,用的是阻塞模式,while无限循环用的也有问题,会假死,临时缓存bytes不要在while循环中一直创建,否则你的内存很快就崩了,问题太多了,不要说几百个客户端,这些代码能在单客户端情况下运行起来就不错了
解决方案三:
我很奇怪你是在哪抄袭的代码...首先我先问下你知道你所谓的并发是什么意思吗?另外服务端跟客户端你清楚分别是什么意思吗?而且就你所谓的"客户端并发几百"..我还真第一次听说....给我讲下你要实现什么流程是什么样的...这样我才好对应出思路啊....
解决方案四:
引用2楼by_封爱的回复:
我很奇怪你是在哪抄袭的代码...首先我先问下你知道你所谓的并发是什么意思吗?另外服务端跟客户端你清楚分别是什么意思吗?而且就你所谓的"客户端并发几百"..我还真第一次听说....给我讲下你要实现什么流程是什么样的...这样我才好对应出思路啊....
我需要实现的是:我系统通过向另一个系统按约定的4个字节长度发送报文,然后接收对方的返回信息。担心如果我系统同时500多人都在socket请求接收时怎样避免丢数据情况。真的不太懂,还请多多指教
解决方案五:
引用2楼by_封爱的回复:
我很奇怪你是在哪抄袭的代码...首先我先问下你知道你所谓的并发是什么意思吗?另外服务端跟客户端你清楚分别是什么意思吗?而且就你所谓的"客户端并发几百"..我还真第一次听说....给我讲下你要实现什么流程是什么样的...这样我才好对应出思路啊....
另外想请教send,receive时需要加lock锁吗
解决方案六:
引用1楼AndroidJavaApp的回复:
光从这一小段接收数据的代码就能看出很多问题,这段代码应该是根据网上一些socket演示的例子改的吧,从socket创建到结束都写在了一起,用的是阻塞模式,while无限循环用的也有问题,会假死,临时缓存bytes不要在while循环中一直创建,否则你的内存很快就崩了,问题太多了,不要说几百个客户端,这些代码能在单客户端情况下运行起来就不错了
循环外创建?需要clear吗?
解决方案七:
你只放出了clint端的代码server端的呢??所谓并发数,那是服务端的事情客户端并发连接500个服务端??没听说过那么干的
解决方案八:
listByte.Add(bytes[i]);还有这个代码又是干啥用的为啥要把byte[]里的东西循环放到list里去?