首页 新闻 会员 周边 捐助

TcpClient socket问题

1
悬赏园豆:40 [已关闭问题] 关闭于 2012-08-17 14:09

怎么一直监听服务器返回的数据?现在我遇到的情况是:我向服务器发送一个请求,服务器分两次回发给我了数据,客户端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);
}
新问题:怎么才能判断是否接收完毕,跳出循环呢

 



 

Rookier的主页 Rookier | 小虾三级 | 园豆:652
提问于:2012-08-10 16:01
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册