Im連接到Socket服務器以發送和接收消息。一切工作正常,因爲消息進出,但每隔一段時間它就會失去聯繫。我試圖捕捉異常並重新連接到服務器。 連接丟失時的第一個例外:重新連接TCPClient拋出異常
System.IO.IOException:無法從傳輸連接讀取數據:建立的連接被主機中的軟件中止。 ---> System.Net.Sockets.SocketException:一個建立的連接是由軟件在主機 在System.Net.Sockets.Socket.Receive中止(字節[]緩衝液,的Int32偏移的Int32大小,的SocketFlags的SocketFlags) 在System.Net.Sockets.NetworkStream.Read(字節[]緩衝液,的Int32偏移的Int32大小)
,然後當它試圖重新連接:
System.ObjectDisposedException:無法訪問已釋放的對象。 對象名稱:'System.Net.Sockets.NetworkStream'。 at System.Net.Sockets.NetworkStream.Read(Byte [] buffer,Int32 offset,Int32 size)
我的問題是我做錯了什麼?什麼是重新連接到服務器的最佳解決方案? 我的代碼看起來像這樣:
class Test
{
private TcpClient myTcpClient;
private NetworkStream myStream;
private string host = xxx.xxx.xxx;
private int port = 8888;
private string streaming = "";
public void Listen()
{
this.myTcpClient = new TcpClient(host, port);
this.myStream = this.myTcpClient.GetStream();
Listener();
}
private void Listener()
{
try
{
while (true)
{
byte[] numResponse = new byte[8192];
int x = this.myStream.Read(numResponse, 0, numResponse.Length);
Decrypt(numResponse, 0, x);
string stream = Encoding.UTF8.GetString(numResponse);
this.streaming = string.Concat(this.streaming, stream);
}
}
catch(Excpetion ex)
{
// write ex.ToString() to TextFile
this.myTcpClient = new TcpClient(host, port);
this.myStream = this.myTcpClient.GetStream();
Listener();
}
}
}
不相關,但您沒有使用myStream.Read的返回值。這總是一個錯誤。使用StreamReader從NetworkStream讀取。你的Unicode解碼也被破壞,因爲數據包可能被任意分割。 – usr