首页 新闻 会员 周边

TcpListener监听,如果客户端发送消息后,不关闭连接,我就获取不到消息,怎么回事?

0
悬赏园豆:10 [待解决问题]

用这个监听
 TcpListener tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 9999);

 

这里是读取消息的

 1 while (true)
 2 {
 3 TcpClient tcpClient = tcpListener.AcceptTcpClient();
 4 NetworkStream ns = tcpClient.GetStream();
 5 int recv;
 6 string mess=String.Empty;
 7 while (true)
 8 {
 9 byte[] bytes = new byte[size];
10 try
11 {
12 
13 if ((recv = ns.Read(bytes, 0, bytes.Length)) == 0)
14 {
15 //Console.WriteLine("disconnected");
16 break;
17 }
18 }
19 catch
20 {
21 //Console.WriteLine("missing");
22 break;
23 }
24 mess += System.Text.Encoding.ASCII.GetString(bytes, 0, recv);
25 
26 }

 

 

 

 

这是发送消息端口代码

 public Form1()
        {
            InitializeComponent();
            string server = "127.0.0.1";
            Int32 port = 9999;
            tc = new TcpClient(server, port);
        }
        TcpClient tc;
        private void button1_Click(object sender, EventArgs e)
        {
          
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(richTextBox1.Text);

            NetworkStream stream = tc.GetStream();
            stream.Write(data, 0, data.Length);
            stream.Flush();
        }

 

我想进行简单的同步连接,但是不想每次发送消息都关闭连接。

但是我点击发送后,接收端一直卡在这里

if ((recv = ns.Read(bytes, 0, bytes.Length)) == 0)

当我把发送程序退出,也就是连接强行关闭后,接受段就不卡在那里了,获得了之前的消息。


我想知道有什么方法,能保持连接不关闭,而且能获得消息呢?
君宝的主页 君宝 | 初学一级 | 园豆:97
提问于:2012-07-01 23:53
< >
分享
所有回答(3)
0

建议:找一个好点的Tcp通信的Demo研究下,再搞你这个吧!

Angkor--:-- | 园豆:1086 (小虾三级) | 2012-07-02 00:31
0

代码修改为:

while (true)
{
    TcpClient tcpClient = tcpListener.AcceptTcpClient();
    //此处构建一个线程调用Process方法,并把tcpClient作为参数传递过去
}

private void Process(TcpClient tcpClient)
{
    NetworkStream ns = tcpClient.GetStream();
    int recv;
    string mess=String.Empty;
    while (true)
    {
        byte[] bytes = new byte[size];
        try
        {

        if ((recv = ns.Read(bytes, 0, bytes.Length)) == 0)
        {
            //Console.WriteLine("disconnected");
            break;
        }
    }
    catch
    {
        //Console.WriteLine("missing");
        break;
    }
    mess += System.Text.Encoding.ASCII.GetString(bytes, 0, recv);

}
无之无 | 园豆:5095 (大侠五级) | 2012-07-02 08:37
0

接收网络数据流中的数据的时候没有判断接收多少后停止接收,就会出现这个问题,一般情况下当前socket会话断开,或服务端停止接收

谷仁儿 | 园豆:198 (初学一级) | 2013-11-08 21:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册