同期メッセージ交換用のクライアント クラス:
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;
}
}
このアプリケーションをデバッグすると、最初に送信されたメッセージと受信された応答は完全に機能しますが、2 番目のメッセージを送信しようとすると、TcpClient.getStream() は InvalidOperationException で失敗し、接続が確立されていないことが示されます。
問題は、どこでも積極的に接続を閉じていないことです。を呼び出す前に connection.Connect(host,port) を配置するとgetStream()
、connection.Connected が false であっても、ソケットがまだ接続されているという例外で失敗します。
この問題を解決するためのアイデアはありますか?