私はサーバーソケットを初めて使用しています。単純なアプリケーションを作成しようとすると、この問題が発生しました。私はサーバーアプリケーションに接続するだけでなく、再接続することができます。しかし、2回目を切断すると、エラーが発生します。ここに私のコードは、私は誰かが私がなぜ理解するのを助けることを願っています。上記のコード内のコメントに見られるようにクライアントとサーバーアプリケーションの接続を切断してからC#
private static TcpListener clientListener;
private static Socket clientSocket;
private static bool running = false;
private static Thread runThread;
static void Main(string[] args){
writeMsg(">> Server started");
waitForConnection();
}
private static void writeMsg(String msg){
Console.WriteLine(msg);
}
private static void run(){
while (running){
try{
byte[] prefBuffer = new byte[100];
int bufferSize = clientSocket.Receive(prefBuffer);
writeMsg(">> Data recieved from client");
for (int i = 0; i < bufferSize; i++){
Console.Write(Convert.ToChar(prefBuffer[i]));
}
}
catch{
writeMsg("Connection Lost");
running = false;
clientListener.Stop();
clientSocket.Close();
waitForConnection();
}
}
runThread.Abort();
}
private static void waitForConnection(){
//This is the where the error is created and it says...
//Cannot access disposed object.
clientListener = new TcpListener(IPAddress.Parse("111.111.111.111"), 7414);
clientListener.Start();
writeMsg(">> Listening for connections...");
try{
clientSocket = clientListener.AcceptSocket();
writeMsg(">> Connection established");
running = true;
startRunThread();
}
catch (Exception e){
writeMsg(String.Format(">> Connection failed\n Error: {0}", e.Message));
}
}
private static void startRunThread(){
runThread = new Thread(new ThreadStart(run));
runThread.Start();
}
私はそれを再初期化していても、私は破棄されたオブジェクトにアクセスすることはできませんというエラーを取得しますか?ここ は、スタックトレースは、System.Net.SocketsでSystem.Net.Sockets.Socket.Listen(のInt32バックログ)System.Net.Sockets.TcpListener.Startで
(のInt32バックログ)
で
ですで... \ Program.csを.TcpListener.Start Server.Program.waitForConnectionで()
():行55
http://stackoverflow.com/questions/27182180/how-to-reconnect-to-a-socket-gracefully – Larry