C#:tcp客户端的第一次发送是正常的,但不是第二次发送

时间:2014-08-22 14:06:40

标签: c# tcp client

我正在尝试在Visual Studio上编写我的第一个简单的C#客户端应用程序(我的服务器应用程序是用Python编写的,并且在Linux上运行)。我的客户端已连接,我已在client.GetStream()上定义了StreamReader(STR)和StreamWriter(STW)。 STW.AutoFlush属性设置为True。我的发送按钮上的单击事件捕获我在文本框中写入的文本。输入的文本将通过STW.WriteLine发送到服务器,并通过STR.ReadLine()接收答案。结果显示在另一个文本框中。

第一次传递正常:发送文本并接收并显示答案。当我尝试输入第二个文本时,似乎没有发送到服务器。我不知道为什么。代码如下:

private void Send_Click(object sender, EventArgs e)
    {
        if (rtbRequest.Text != "") {
            text_to_send = rtbRequest.Text;
            STW.WriteLine(text_to_send);
            receive = STR.ReadLine();
            this.rtbResult.Invoke(new MethodInvoker(delegate() { rtbResult.AppendText(receive); }));
            //client.Close();
            //client = new TcpClient();
            //client.Connect(IP_End);
            //STW = new StreamWriter(client.GetStream());
            //STR = new StreamReader(client.GetStream());
            //STW.AutoFlush = true;
        }
    }

如果在点击事件中我在每次发送后关闭客户端,重新打开连接并重新定义STW和STR,它就可以工作(上面的注释行)。知道为什么吗?

此致 帕特里克

编辑:按照尼古拉斯的要求全面实施STR和STW:

        client = new TcpClient();
        IP_End = new IPEndPoint(IPAddress.Parse("xxx.xxx.xxx.xxx"), 13773);
        try
        {
            client.Connect(IP_End);
            if (client.Connected)
            {
                MessageBox.Show("Connected to server");
                STW = new StreamWriter(client.GetStream());
                STR = new StreamReader(client.GetStream());
                STW.AutoFlush = true;
            }

        }
        catch (Exception x)
        {
            MessageBox.Show(x.Message.ToString());
        }

0 个答案:

没有答案