表示する文字列メッセージが必要なリスナーアプリケーションがあります。私はこのアプリケーションを変更することはできません。 C#クライアントを介してこのリスナーにメッセージを送信する必要があります。リスナとクライアントの両方が同じPC(ローカルホスト)上で実行されるはずです。閉じられていないソケット接続に再接続するC#
マイコードを接続するには:
public void ConnectAndSendMessage(string MessageToSend)
{
string localIP = GetIPAddress();
try
{
TcpClient tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");
tcpclnt.Connect(localIP, 2400);
Socket socket = tcpclnt.Client;
bool connectionStatus = socket.Connected;
if (connectionStatus)
{
//Send Message
ASCIIEncoding asen = new ASCIIEncoding();
//string sDateTime = DateTime.Now.ToString();
int SendStatus = socket.Send(asen.GetBytes(MessageToSend + Environment.NewLine));
}
Thread.Sleep(2000);
tcpclnt.Close();
}
catch (Exception e)
{
Console.WriteLine("Error..... " + e.StackTrace);
}
}
問題:
クライアントアプリケーションが正常に動作し、リスナーに正常にメッセージを送信します。 しかし、tcpclnt.Close();
を実行する前にクライアントがクラッシュしたら(私はクライアントプログラムを閉じます)、問題が発生します。この場合、クライアントプログラムを再起動すると、以前の実行(クラッシュした実行)でアプリケーションがソケットを閉じなかったため、ソケットに接続できません。
この状態でリスナーに再接続するにはどうすればよいですか?
をこれを試してみてください。また、プログラムでは変更できない問題があります。通常、サーバは複数の接続を許可し、放棄された接続をタイムアウトする手段を持っています。 –