返回信息流用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数据。
请高手解答一下这是为什么,以及如何 才能实现接收两个数据连续接收,非常感谢!!
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3097同步于 2011/7/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
C#中socket如何连续接收数据
sambob
2011/7/1镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 wangjianzhou 的大作中提到: 】
: 给服务器端接收程序时,做一个判断,数据接收完了关一次连接,下一次接收时再打开。
: --
不行啊,系统必须在5ms内完成这两个文件的接收,并且还要进行大量的数据处理和显示
这种方法没有办法达到系统规定的性能
byte b = new byte[8]; 这行是不是有错?
你看看socket.receive返回了多少字节?
【 在 sambob 的大作中提到: 】
: 用c#写了一段连续接收的代码:
: 首先客户端连续发了两个数据帧 :
: c.send(a,a.length,null);
: ...................