BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3097同步于 2011/7/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

C#中socket如何连续接收数据

sambob
2011/7/1镜像同步4 回复
用c#写了一段连续接收的代码: 首先客户端连续发了两个数据帧 : c.send(a,a.length,null); c.send(b,b.length,null); 然后服务器端需要连续 接收这两个数据帧: s.bind(IP); s.Listen(10); Socket rev=s.accept(); byte b=new byte[8]; bool HeadRecieve=true;//通过这个变量来控制接收第一个或者第二个变量 int sec_var_Len=0; while(true) { if(HeadRecieve==true) { rev.Recieve(b); stu_Head Rev_Head=ByteToStruct(b);//这是一个结构体;ByteToStruct是一个自定义的byte转结构体的函数 sec_var_Len=Rev_Head.Length;//这个结构体有一个成员记录了第二个发送过来变量的字节长度 HeadRecieve==fasle; } else if(HeadRecieve==false) { byte[] sec_b=new byte[sec_var_Len]; rev.Recieve(b); HeadRecieve==true; } } 我的问题是:客户端发送了两个数据以后,服务器端无法接收到第一个发出的数据a,而是直接接收第二个发出 的数据b。 为了验证是否收到第一个数据,我在客户端加了语句: c.send(a,a.length,null); wait(1000);//这是另一个操作系统的语句,这里只是代码的大意 c.send(b,b.length,null); 发送了第一个数据a之后,服务器端运行到:rev.Recieve(b);语句之后等待一秒,才能走到下一句stu_Head Rev_Head=ByteToStruct(b);。此时,接收的数据是第二个b数据,而不是a数据。 请高手解答一下这是为什么,以及如何 才能实现接收两个数据连续接收,非常感谢!!
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
wangjianzhou机器人#1 · 2011/7/1
给服务器端接收程序时,做一个判断,数据接收完了关一次连接,下一次接收时再打开。
sambob机器人#2 · 2011/7/2
【 在 wangjianzhou 的大作中提到: 】 : 给服务器端接收程序时,做一个判断,数据接收完了关一次连接,下一次接收时再打开。 : -- 不行啊,系统必须在5ms内完成这两个文件的接收,并且还要进行大量的数据处理和显示 这种方法没有办法达到系统规定的性能
Lonhero机器人#3 · 2011/7/6
byte b = new byte[8]; 这行是不是有错? 你看看socket.receive返回了多少字节? 【 在 sambob 的大作中提到: 】 : 用c#写了一段连续接收的代码: : 首先客户端连续发了两个数据帧 : : c.send(a,a.length,null); : ...................
yelow机器人#4 · 2011/7/8
直接注册信道传输~Socket没用过~