C# Socket 服务端 接收数据的有关问题

C# Socket 服务端 接收数据的问题
如题,我想要判断  在十几秒或者二十几秒内  收到 数据的条数,当大于1条的时候,执行A(),当只有1条数据的时候,执行B()。
求给例子或者思路!!!谢谢!!!
------解决方案--------------------
为什么要封装成2个函数呢,一个函数就可以办到的事情
反正就是for循环嘛
先将收到的数据放队列里,你是放list里还是放数组里还是放datatable里,就看你喜好了
然后for循环倒序执行,先处理最后一条,最后处理第一条
如果只有1条,那就只循环一次嘛.
------解决方案--------------------
每次数据长度不一致,可以用二维数组来存放啊
byte[ ][ ]形式
byte[ ][ ] dataList=new byte[100][ ];
dataList[i]=new byte[recive.length];
------解决方案--------------------
或者你就定义个足够大的二维数组byte[100,2000],再定义个一维数组bytelength[100]来存放每个包的长度
这样就不用动态的修改数组长度了
------解决方案--------------------
如果是入库的话,单片机发来的每个数据应该都是固定长度的吧,先缓存在datatable里就行了,不用扔数组里
阻塞的数据如果都是拼成一个包发来的,也只是接收数据用的BYTE数组长度不固定,不是数据结构不固定
你判断一下接收到的数组可以拆成几个包,循环一下将数据先放datatable里,再循环datatable写入数据库就好了嘛.
------解决方案--------------------
引用:
Quote: 引用:

如果是入库的话,单片机发来的每个数据应该都是固定长度的吧,先缓存在datatable里就行了,不用扔数组里
阻塞的数据如果都是拼成一个包发来的,也只是接收数据用的BYTE数组长度不固定,不是数据结构不固定
你判断一下接收到的数组可以拆成几个包,循环一下将数据先放datatable里,再循环datatable写入数据库就好了嘛.


比如有三个单片机,每一个单片机发来的数据格式都不一样,但同一个单片机发的数据格式是一样的。当服务端接收数据时,服务端先要判断是哪个单片机发来的数据,然后将数据解析,比如一条数据中包含了一个人的年龄,籍贯等信息,我要解析出来,然后把这些信息插到数据表中。

客户端的IP是能获取的,可以通过判断IP来给数据分组
然后将不同单片机发来的数据分装到不同的数组里去
每个包标准长度是已知的,不知道你单片机在重发的时候是同时发来N个包,还是将数据都打成一个包发过来
如果是一个大包,就先按标准长度拆分成二维数组,然后循环去处理每组数据
如果直接是发来N个包,就直接放到二维数组里就好了嘛.
------解决方案--------------------
引用:
Quote: 引用:

C#  Socket 服务端  接收数据的有关问题
封包,队列处理  记录 包数。。。。


我看到你在博文中写的串口接收数据包的了。我要记录接受的条数的话,在serialPort1_DataReceived()中添加一个变量int receivenum = 0;然后在while循环中添加receivenum++;,是吗?        可是如何先判断接受的条数,再对每条数据进行处理?因为我需要做的是:当接收到的数据条数为1时,执行A()对数据进行处理;当数据条数大于1时,执行B()对每条数据进行处理。        还有一个问题,假如服务端一次性一共接受了3条数据,我想先处理第3条数据,再处理第二条数据,最后处理第一条数据。这有如何做呢?谢谢!!!


在while循环中添加receivenum++; 中是没错的,但变量int receivenum = 0不能定义在serialPort1_DataReceived这个方法中,要定义成类的私有字段,让他去累加 然后再用一个计时器按时间去统计receivenum 这个值在两个时间内发生了多少变化。