我正在尝试在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());
}