C#でソケット通信のプログラムを書いていて、解決できない問題があるので質問させてください
やりたいこと、System.Net.Sockets.Socket を再利用したいです。
以下のプログラムのようなことを例外なく実行させるには、何が足り何のでしょうか?
新しいインスタンスを作ることなく実行したいです
###発生している問題・エラーメッセージ
System.InvalidOperationException: 'ソケットがいったん切断されると、非同期、および異なる EndPoint でのみ再び受け取ることができます。 操作が完了するまで終了しないスレッド上で BeginConnect を呼び出さなければなりません。'
###該当のソースコード
class Class1
{
Socket socket;
public Class1()
{
socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
var remoteIpEp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 54321); socket.Connect(remoteIpEp ); socket.Disconnect(true); socket.Connect(remoteIpEp ); //ここで例外 socket.Disconnect(true); }
}
###試したこと
・socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true);
・socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true);
・socket.BeginConnectなど利用しても同じ例外にはまってしまいました。
・socket.Shutdown(SocketShutdown.Both);
回答2件
あなたの回答
tips
プレビュー