客户端Socket接收数据问题,跪求,谢谢,只要帮忙解决问题,可以付费的

问题描述

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里去?

时间: 2024-10-10 06:21:33

客户端Socket接收数据问题,跪求,谢谢,只要帮忙解决问题,可以付费的的相关文章

Socket接收数据包

问题描述 我用socket接收数据,发送端发送了2000个字节的数据包,但是服务器接收数据包的时候接收的是两个被分开的数据包,但是这两个数据包的总和加起来是4973.后来我在大神的指导下,能接受一个完整的数据包,但是接收的这个数据包长度还是4973个.请问这是什么原因?谢谢 解决方案 解决方案二:最好不要发送太大的数据包解决方案三:从你的问题看不出问题出在哪里.你可以在我贴出的一个例子的基础上做扩展和封装.在这个底层没有必要自己写.解决方案四:tcp发送的数据的大小,根据你的业务信令具体的实例而

asp.net c#.net Tcp socket 接收数据代码

asp教程.net c#.net tcp socket 接收数据代码  //监听网络          public bool opennet(string sport)        {             processor = new thread(new threadstart(startlistening));//新建监听线程             processor.priority = threadpriority.normal;             processor.

数据库-怎么把MySql数据转换成Mongodb数据,跪求大神解答

问题描述 怎么把MySql数据转换成Mongodb数据,跪求大神解答 现在要做全国4级联动,想用Ajax做,但数据量太大.好不容易把数据导成sql的了, 但是数据库要用mongodb,不知道怎么弄了,求大神指点 解决方案 写个程序,jdbc从mysql把数据读出来,组装成想要的格式,再insert到mongodb中. 解决方案二: 对mongodb不熟悉.但是刚刚略微看了下是非关系型的数据库.在做持久操作的时候不用写sql直接操作方法即可. 那么我目前想到的思路是: 1.写个程序来检索你的mys

在tomcat上运行没有问题,在weblogic上运行就报下面的错,跪求大神帮忙

问题描述 在tomcat上运行没有问题,在weblogic上运行就报下面的错,跪求大神帮忙 java.sql.SQLException: Statement cancelled, probably by transaction timing out at weblogic.jdbc.wrapper.Statement.postInvocationHandlerNoWrap(Statement.java:128) at weblogic.jdbc.wrapper.PreparedStatement

c++-跪求大神帮忙写出程序啊~。

问题描述 跪求大神帮忙写出程序啊-. 大神??啊??朋友给我个题?我真作难了??是这样?: 有29组数字??,选任意8组为一组? 要求 1.?求这8组中共有的数字 ?2.要除掉 12345678 23456789 7 8 9 10 11 12 13 14---- ------23 24 25 26 27 28 29 30---- 2627 28 29 30 31 32 33 等等 这样紧挨着的8组 3.把每8组组合出来 的数字 一一列出??---------- 以下是29组数据: (01)?01

c++-跪求大神帮忙,关于对dll动态链接库加密的问题

问题描述 跪求大神帮忙,关于对dll动态链接库加密的问题 我们在搞一个项目,写了好多个dll文件,现在老板要求对dll文件进行加密,使得这个dll文件只能在特定的电脑上打开,转存,不能被别的电脑随便打开....跪求那个好心的大神给点意见.. 解决方案 不需要对dll加密,你的dll调用的时候传一个序列号,你的dll内部获得主板id,网卡mac或者磁盘卷标等,按照一个加密算法算出序列号,和输入的比较,确认正确才执行,否则丢出错误. 你的序列号放在你的主程序中,这样别人就算拷贝了你的程序,因为机器环

lda 主题 建模-跪求各位大侠帮忙解决LDA代码问题,小妹感激不尽!

问题描述 跪求各位大侠帮忙解决LDA代码问题,小妹感激不尽! 我在网上找到了yangliuy提供的LDA Gibbs Sampling 的JAVA实现源码,但它是针对英文文档的.我在他的基础上,把英文文档换成已经分词的中文文档,并把停用词换成中文的,但运行时老是有问题.LdaGibbsSampling代码如下: package liuyang.nlp.lda.main; import java.io.File; import java.io.IOException; import java.ut

编程-跪求大神帮忙看下代码,错了不晓得怎么改哦

问题描述 跪求大神帮忙看下代码,错了不晓得怎么改哦 switch (uMsg) { case WM_CHAR: char szChar[20]; sprintf(_T(szChar),_T( "char code is %d"), wParam); 错误 1 error C2065: "LszChar": 未声明的标识符 IntelliSense: "const wchar_t *" 类型的实参与 "const char *"

跪求大神帮忙解决一个java问题

问题描述 跪求大神帮忙解决一个java问题 Invalid classpath publish/export dependency com.genuitec.runtime.library/com.genuitec.generic_6.0. The associated classpath container cannot be included in the published/exported module. 这个问题到底是啥意思,困扰一天了 解决方案 解决: 不要动eclipse.在控制台