c#tcpip通讯断开
求助,我新人,按照C#入门经典的程序修改了一个服务器端WINFORM程序,使用3个线程通讯,1个线程建立连接,连接后,启动另外2个线程,分别监听和发送。监听是阻塞式的,如果这个监听发生异常或者连续收到5次空内容,我会判断为断开,然后决定是否重新连接。
现在的问题是,如果一直在通讯,不会有什么问题,如果长时间不用,如果1个小时不用,就会自动断开。搞不懂为什么。求教各路大神。
还有就是不明白SOCKET连接字是什么意思?
下面的连接线程里面的打码
Listener = new TcpListener(IPAddress.Any, nPortNet);
Listener.Start();
try
{
Client = Listener.AcceptTcpClient();
bLost = false;
NetStream = Client.GetStream();
bConectOK = true;
while (true)
{
if (bStopCon)//停止加工
{
break;
}
if (!Client.Connected)//没有连接
{
break;
}
if (bLost)//监听失败重新连接
{
//bLost = false;
break;
}
if (!bListening)
{
bListening = true;
backgroundWorker2.RunWorkerAsync();
}
if (bNeedSend)
{
if (!bSending)
{
bSending = true;
backgroundWorker3.RunWorkerAsync();
}
}
Thread.Sleep(100);
}
NetStream.Close();
}
catch {
MessageBox.Show("服务器关闭");
}
Listener.Stop();//关闭侦听
接收线程里面的代码
int bufferSize=256;
byte[] buffer=new byte[bufferSize];
int readByte = 0;
try
{
readByte = NetStream.Read(buffer, 0, bufferSize);
string sTemp = Encoding.ASCII.GetString(buffer).Substring(0, readByte);
if (sTemp.Length > 0)
{
W_Receive(sTemp);//处理接收到的数据
}
else
{
nListenLostTimes++;
if (nListenLostTimes >= 5)
{
bLost = true;
nListenLostTimes = 0;//失去数据次数清零
}
}
}
catch
{
MessageBox.Show("监听失败;请重新连接客户端");
bLost = true;
bMarking = false;
}