c#tcpip通讯断开

wdlwlf 2011-04-11 12:09:32
求助,我新人,按照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;

}
...全文
607 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Carpathia 2011-04-12
  • 打赏
  • 举报
回复
TcpClient用WriteTimeout和ReadTimeout设置超时时间,将该事件设大即可解决断开问题,例如
NetStream.WriteTimeout=5*1000//5秒发送超时
NetStream.ReadTimeout=5*1000//5秒读取超时
Carpathia 2011-04-11
  • 打赏
  • 举报
回复
设置超时时间
ReciveTimeOut//接收超时
SendTimeOut//发送超时
大黄鸭在发光 2011-04-11
  • 打赏
  • 举报
回复
用TCP协议的话,调用socket.connect后就会和服务器连接,在调用socket.close方法之前是不会中断连接的。之间的时间可以调用socket.send和receive收发数据。
TCP协议本身是持久保持连接的,但是服务器程序为了节省资源,会有一个时间策略来定时察看某个连接最近一次收发数据的时间到现在的间隔,如果这个间隔大于事先定好的某个值,服务器会主动断开这个连接
如果要让某个客户端软件一直保持和这种服务器的连接,就是要定时的在小于上述时间间隔内向服务器发送有效的数据包。
我以前记得试验过,,貌似大概5分钟不操作(send,receive)这个连接就会关掉

wdlwlf 2011-04-11
  • 打赏
  • 举报
回复
3楼能说详细些么?

内容概要:本文档围绕“风储VSG-基于虚拟同步发电机的风储并网系统Simulink仿真”展开,系统介绍了采用虚拟同步发电机(VSG)控制策略的风电与储能联合并网系统的建模与仿真方法。通过Simulink平台构建完整的电力系统动态模型,重点实现VSG的关键控制逻辑,以提升新能源并网的稳定性、惯性响应与频率支撑能力。文档不仅涵盖核心仿真模型,还整合了大量相关前沿研究内容,如混合储能调频、微电网优化、电动汽车可调能力评估、智能算法在电力系统中的应用等,并提供丰富的Matlab/Simulink代码实例,具有较强的科研复现价值和技术参考意义。; 适合人群:具备电力系统基础理论知识和Matlab/Simulink仿真能力的研究生、科研人员及从事新能源发电、储能控制、智能电网等领域工作的工程技术人员;特别适用于正在开展风储协同控制、虚拟同步机、构网型变流器等相关课题研究的高校师生。; 使用场景及目标:① 深入理解虚拟同步发电机(VSG)在风储并网系统中的控制原理与技术优势;② 借助提供的仿真模型与代码完成科研论文复现、算法验证与系统性能测试;③ 探索新能源高渗透背景下提升电网稳定性的关键技术路径,包括惯量模拟、一次频率响应、储能协同控制等。; 阅读建议:建议读者按照文档结构循序渐进地学习,优先下载并运行配套的Simulink模型与Matlab代码,结合VSG控制策略的设计细节进行调试与分析,同时可关注公众号“荔枝科研社”获取完整资源包及持续的技术支持,以提升科研效率与创新能力。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧