110,552
社区成员
发帖
与我相关
我的任务
分享
private static int SendMessage(Socket s, byte[] msg)
{
int offset = 0;
int sent;
int size = msg.Length;
int dataleft = size;
byte[] msgsize = new byte[2];
//将消息尺寸从整形转换成可以发送的字节型
msgsize = BitConverter.GetBytes(size);
//发送消息的长度信息
sent = s.Send(size);//书上是这样写的,我想应该是sent = s.Send(msgsize);吧
while (dataleft > 0)
{
sent = s.Send(msg, offset, dataleft, SocketFlags.None);
//设置偏移量
offset += sent;
dataleft -= sent;
}
return offset;
}
private byte[] ReciveVarMessage(Socket s)
{
int offset = 0;
int recv;
//问题开始
//中间的部分没有明白什么意思
//不应该是先接收消息长度消息,将长度消息转换为int类型,根据长度接收发送的消息么
byte[] msgsize = new byte[2];
//将字节数组的消息长度信息转换为整形
int size = BitConverter.ToInt16(msgsize);
int dataleft = size;
byte[] msg = new byte[size];
//接收2个字节大小的长度信息
recv = s.Receive(msgsize, 0, 2, 0);
//问题结束
while (dataleft > 0)
{
//接收数据
recv = s.Receive(msg, offset, dataleft, 0);
if (recv == 0)
{
break;
}
offset += recv;
dataleft -= recv;
}
return msg;
}
while (dataleft > 0) { //接收数据 recv = s.Receive(msg, offset, dataleft, 0); if (recv == 0) { break; } offset += recv; dataleft -= recv; }
这里感觉完全不对啊.
两次Receive之间不需要sleep?怎么知道此周期没有接收完毕的数据,下个周期一定能够到达呢?
如果默认发送方没有延时的将所有数据都送到缓冲区里了,
那应该能够一次性获取到所有需要的数据了吧...