【发布时间】:2013-07-24 12:56:24
【问题描述】:
用于同步消息交换的我的客户端类:
public class AsClient
{
private TcpClient connection;
public AsClient(int serverPort, String ip)
{
connection = new TcpClient(ip, port);
}
public AsMessage sendMessage(AsMessage message)
{
System.Diagnostics.Debug.WriteLine("Connected: " + connection.Connected);
NetworkStream ns = connection.GetStream();
StreamReader reader = new StreamReader(ns);
StreamWriter writer = new StreamWriter(ns);
// Send Message:
String msgToSendEncoded = message.encode();
writer.WriteLine(msgToSendEncoded);
writer.WriteLine("\n"); // each message is terminated by a paragraph
writer.Flush();
// Receive Message:
String msgReceivedRaw = reader.ReadLine();
AsMessage response = AsMessage.decode(msgReceivedRaw);
reader.Dispose();
writer.Dispose();
ns.Close();
return response;
}
}
如果我调试这个应用程序,发送的第一条消息和接收到的响应工作得很好,但是一旦我想发送第二条消息,TcpClient.getStream() 就会失败并出现 InvalidOperationException,这表明连接没有建立了。
问题是我没有主动关闭任何地方的连接。如果我在调用getStream() 之前放置connection.Connect(host,port),它会失败,但套接字仍然连接,即使connection.Connected 为假。
有解决这个问题的想法吗?
【问题讨论】:
-
我有点糊涂,你为什么不用myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
-
嗯,这是来自我们的代码库的代码,没有人觉得对此负责,所以我正在尝试修复这个错误。
标签: c# tcp network-programming