我有辦法告訴TCP客戶端反覆連接,如果一個布爾是真的,但我不知道這是否是一個好方法它,因爲我幾乎告訴它一遍又一遍,並忽略錯誤。TCP自動重新連接(永遠直到用戶告訴它停止)
但我也不知道有任何其他的方式來做到這一點。
但也許你們這樣做,這裏是代碼的一部分:
while (capcon == true)
{
using (tcp = new TcpClient())
{
tcp.NoDelay = true;
try
{
if (!tcp.Connected)
tcp.Connect(adress);
}
catch (Exception e)
{
if (e is SocketException || e is IOException) { }
else
MessageBox.Show(e.Message + " Tcp Connect : Send");
}
using (var ms = new MemoryStream())
{
Stoptimer = new Stopwatch();
int i = 0;
while (tcp.Connected && capcon == true)
{
try
{
FastMethods.CaptureBitBit(hwnd, JpegParam, jpeg, ms);
if (bsize != ms.Length && tcp.Connected)
{
bsize = ms.Length;
Stoptimer.Start();
tcp.GetStream().Write(BitConverter.GetBytes(bsize), 0, intsize);
tcp.GetStream().Write(ms.GetBuffer(), 0, (int)bsize);
//i++;
//tcp.GetStream().Write(rv, 0, rv.Length);
if (i > 100)
{
i = 0;
Stoptimer.Stop();
Console.WriteLine(Stoptimer.ElapsedTicks);
Stoptimer = new Stopwatch();
}
}
ms.SetLength(0);
}
catch (Exception e)
{
if (e is SocketException || e is IOException)
{
break;
}
else
{
MessageBox.Show(e.Message + ": Send Error");
}
}
}
}
}
}
好吧,你可以看到,it's一個爛攤子,但it's我得到了什麼。
你錯過了你實際上停止嘗試連接的部分(當連接成功時)... – legrandviking
當它成功時,它會繼續將代碼放到另一個while循環中,並在那裏做它的東西。如果連接失敗,它會中斷,使其運行到先前的While循環,這將告訴它重新連接。 – Zerowalker
忽略異常從來就不是好主意。一些表示可以通過重試恢復的條件:有些不會。 – EJP