@为结束标识(用定长或发前长度消息一样有下边的困扰)
比如A客户发"abcdefg@"
B客户发"hijklmn@"
而服务器是异步的。收到消息就返回
假设服务器收到了A的abcde(请教问题1.那服务器要怎样做来以确保收完了数据?)
假设服务器在收到了A的abcde后。收到的是B的hijklmn@。那又要咋办?这不全乱了?
以上几个问号困扰了我很久。希望会的朋友帮我一下
比如A客户发"abcdefg@"
B客户发"hijklmn@"
而服务器是异步的。收到消息就返回
假设服务器收到了A的abcde(请教问题1.那服务器要怎样做来以确保收完了数据?)
假设服务器在收到了A的abcde后。收到的是B的hijklmn@。那又要咋办?这不全乱了?
以上几个问号困扰了我很久。希望会的朋友帮我一下
有人帮我看一下每一个问号吗?
(假设服务器收到了A的abcde(请教问题1.那服务器要怎样做来以确保收完了数据?) )
可以的,callback加标识参数
你的困扰不在这里,你的意思是A和B用的是一个端口,而且同时发送,而且没有自己的协议,协议头就应该写明自己的身份,我就是A,然后每个数据包都要添加协议头的,你要好好看看TCP/IP了,看看里面的四层是怎么通信的,每层都添加自己的协议的,每个数据报都有协议头的,
//得到一条消息的长度
byte datasize=new byte[4];
netstream.Read(datasize,0,4) //前4位是消息的长度 int size=System.BitConverter.Toint32(datasize,0); //返回由字节数组中指定位置的4个字节换来的32位有符号整数 //循环接收直到一条完整的消息全部读入字节数组中
byte[] message=new byte[size]; int dataLeft=size;
int start=0;
while(dataLeft>0)
{
int recv=netStream.Read(message,start,dataleft);
//recv为已读取的字节长度,如果没读取完,循环读取
start+=recv;
dataleft-=recv;
}