timeout مربوط به Send اطلاعات هستش. هیچی ارتباط احتمال زیاد قطع شده باید برنامه رو طوری مدیریت کنی که در صورت بروز ارورهای این شکلی قابلیت اتصال مجدد رو داشته باشه.
مثلا این برای سرور هستش:
public void StartClient(string serverip, int serverport, StartScreen frm)
{
GStartScreen = frm;
var Sert = new CancellationTokenSource();
CancellationToken ct = Sert.Token;
new Task(() =>
{
while (true)
{
while (HandConnect)
{
Thread.Sleep(4000);
}
if (!Connect)
{
Action act = new Action(() =>
{
dlg.BtnExit.Enabled = false;
dlgGame.BtnExit.Enabled = false;
});
if (dlg.BtnExit.InvokeRequired)
dlg.BtnExit.BeginInvoke(act);
else
if (dlgGame.BtnExit.InvokeRequired)
dlgGame.BeginInvoke(act);
else
act();
server = serverip;
port = serverport;
// تلاش برای اتصال با سرور
try
{
clientSocket = new System.Net.Sockets.TcpClient();
clientSocket.Connect(serverip, serverport);
}
catch (Exception e)
{
if (e.ToString().Contains("No connection could be made because the target machine actively refused it"))
{
continue;
}
else
Console.WriteLine("<< :" + e.ToString());
}
if (clientSocket.Connected)
{
Action Newact = new Action(() =>
{
dlg.BtnExit.Enabled = true;
dlgGame.BtnExit.Enabled = true;
});
if (dlg.BtnExit.InvokeRequired)
dlg.BtnExit.BeginInvoke(Newact);
else
if (dlgGame.BtnExit.InvokeRequired)
dlgGame.BeginInvoke(Newact);
else
Newact();
// اتصال با سرور برقرار است
Connect = true;
networkStream = clientSocket.GetStream();
Thread Cthread = new Thread(() => DataSendAndReCive());
Cthread.Start();
SendData("Connect");
CheckConnection();
}
}
Thread.Sleep(4000);
}
}, ct).Start();
}