我有一个应用程序,它从文本框中获取IP地址,端口和一些文本,并使用NetworkStream& amp; TcpClient的。当用户单击btnSendMarkerSvc时,写入/读取将触发。
我在读取部件时遇到问题。我确信写操作正常,但我在读取时遇到错误
服务器最终将作为Windows服务运行,现在,它只是一个控制台应用程序。它与该项目在同一解决方案中的另一个项目。
这是我原来的代码:
private void btnSendMarkerSvc_Click(object sender, EventArgs e)
{
try
{
if (txtMarkerRecord.Text == null) return;
TcpClient client = new TcpClient();
client.Connect(System.Net.IPAddress.Parse(txtMarkerIP.Text), int.Parse(txtMarkerPort.Text));
Byte[] data = System.Text.Encoding.ASCII.GetBytes(txtMarkerRecord.Text);
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
stream.Close();
client.Close();
data = new Byte[1024];
String response = String.Empty;
Int32 bytes = stream.Read(data, 0, data.Length);
response = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
txtMarkerReadMsg.Text = response;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我找到了这个link,它似乎描述了一个与我类似的问题所以我改变了我的代码以反映这一点。
这是当前的代码:
private void btnSendMarkerSvc_Click(object sender, EventArgs e)
{
try
{
if (txtMarkerRecord.Text == null) return;
TcpClient client = new TcpClient();
client.Connect(System.Net.IPAddress.Parse(txtMarkerIP.Text), int.Parse(txtMarkerPort.Text));
Byte[] data = System.Text.Encoding.ASCII.GetBytes(txtMarkerRecord.Text);
NetworkStream stream = client.GetStream();
stream.ReadTimeout = 250;
stream.Write(data, 0, data.Length);
data = new Byte[data.Length];
var memStream = new MemoryStream();
Int32 bytes = stream.Read(data, 0, data.Length);
while(bytes > 0)
{
memStream.Write(data, 0, bytes);
bytes = stream.Read(data, 0, data.Length);
}
txtMarkerReadMsg.Text = memStream.ToString();
stream.Close();
client.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
错误是: 无法从传输连接读取数据:远程主机强制关闭现有连接。
错误发生在Int32 bytes = stream.Read(data, 0, data.Length);
行,我已经检查了断点。