怎么一直监听服务器返回的数据?现在我遇到的情况是:我向服务器发送一个请求,服务器分两次回发给我了数据,客户端C#代码BeginRead 只能异步读取到第一次的回发数据,我怎么才能一直监听服务器的返回数据?
当我第二次向服务器发送数据,服务器把第一次未接收到的第二个数据包发给我了。
也就是说,我向服务器发送数据,一次只能接收一个数据包,其他的包都被缓存排队去了。
这种问题该怎么解决?别跟我说在本地监听服务器返回数据。。。有没有其他方法?
public void Lister(object classeterm) { class_eterm class_eterm = classeterm as class_eterm; server = new TcpListener(IPAddress.Parse(ServerIP), Port); server.Start(); Byte[] bytes = new Byte[256]; String data = null; while (true) { TcpClient client = server.AcceptTcpClient(); stream = client.GetStream(); int i; try { while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) { manual.Reset(); returnStr = ""; data = System.Text.Encoding.Default.GetString(bytes, 0, i); epublic.msgreback1 = "ing"; class_eterm.sendmessage(FUNCS_eTerm.tcpETcode(data)); //等待数据返回 manual.WaitOne(); //向客户端发送数据 byte[] msg = System.Text.Encoding.Default.GetBytes(returnStr); //client.Client.Send(msg); //stream.Write(msg, 0, msg.Length); string str="大家好,发送完啦!"; byte[] test=Encoding.Default.GetBytes(str); stream.Write(test, 0, test.Length); string str2 = "第二条"; byte[] test2 = Encoding.Default.GetBytes(str2); stream.Write(test2, 0, test2.Length); string str3 = "第3条"; byte[] test3= Encoding.Default.GetBytes(str3); stream.Write(test3, 0, test3.Length); stream.Flush(); //client.Close(); } } catch { stream.Close(); client.Close(); } } }
做了个测试,
stream.Write()多次,客户端该怎么去接收数据,才能接收完全?//解决,循环接收
客户端:
while(true){ this.ns.BeginRead(dataRead.msg, 0, dataRead.msg.Length, new AsyncCallback(this.readCallBack), dataRead); } 新问题:怎么才能判断是否接收完毕,跳出循环呢