客户端连服务端多线程(TCP连接),客户端断开连接后服务端CPU占用100%
出现的问题是
客户端连服务端多线程(TCP连接),客户端断开连接后服务端CPU占用100%
我想让服务端在5分钟没有收到客户短的信息的话就关闭连接,
请问各位高手有没有什么好办法,。
我没想到在服务端如何控制
但是我在客户端的控制是,记录发送最近一条信息的时间
然后用 一个 timer 计时器。通过事件调用.每60秒测试一次当前时间距离最后一条信息的时间是不是超过了 5分钟,如果超过5分钟就关闭连接和流
但是当我关闭流的时候
服务端CPU占用率就 100%了
我感觉问题是在服务端的流read的时候出现的。
部分代码如下:
客户端连接服务端。采用 TCP连接
服务端在accept 到一个socket 后
建立一个线程 处理客户端的数据
处理部分代码如下
private void starlis() //开始监听,等待客户连接
{
tcplst = new TcpListener(this.serv);
tcplst.Start(); //开始监听
while(true)
{
sock = tcplst.AcceptSocket();
this.clientser = new Thread(new ThreadStart(serviceclient)); //增加一个接受客户段信息的线程
clientser.Start(); //转到处理方法
}
}
private void serviceclient() //接到连接后处理
{
Socket cc = this.sock;
if(cc.Connected)
{
net = new NetworkStream(cc); //实例化网络流 ,准备读取客户断发送到服务器的信息
StreamReader sr = new StreamReader(net);
this.sendWelcomeMsg(cc,this.linkopen);
ClientInfo cli = new ClientInfo(); //实例一个客户端信息
cli.setSock = cc;
cli.setConTime = System.DateTime.Now.ToString();
string data = null;
while(cc.Connected)
{
try
{
data = sr.ReadLine();
}
catch(Exception e)
{
e.ToString();
}
}
}
}
下面是客户端连接 和 超时后断开的代码!
1.客户端连接的代码
try
{
ip = IPAddress.Parse(serverIp);
servIP = new IPEndPoint(ip,Convert.ToInt32(serverPort));
clientTcp = new TcpClient();
clientTcp.Connect(servIP);
this.revice = new Thread(new ThreadStart(recivemsg));
net = clientTcp.GetStream();
revice.Start();
}
catch(Exception er)
{
MessageBox.Show("服务器连接错误");
}
2.超时后的处理代码(略过时间计算)
this.nowTime = System.DateTime.Now; //获取当前时间
TimeSpan ts = this.nowTime - this.oldTime; //当前时间减最后发的一条信息时间
int onLineMin = ts.Minutes; 获取中间的分钟差
if(onLineMin > 5) //如果超时。则断开连接
{
this.clientTcp.Close(); //就是这里出了问题,我不晓得为什么,
sr.Close(); //在执行了clientTcp.Close()后服务端依然可以检测到客户端,并且可以收到客户端发送的信息,那要断开什么才检测不到呢?,但是在执行了sr.close()之后,服务端CPU占用就 100%了,请问下如何断开才对呢?
net.Close();
revice.Abort(); //关闭线程(好象依然关闭不掉流)
}
谢谢各位高手。。我是第一次搞tcp。没有经验,。谢谢大家
各位高手希望能给一点提示 ,最好是在服务器端能检测到客户端已经断开
然后把该客户端的线程给关闭
客户端连服务端多线程(TCP连接),客户端断开连接后服务端CPU占用100%
我想让服务端在5分钟没有收到客户短的信息的话就关闭连接,
请问各位高手有没有什么好办法,。
我没想到在服务端如何控制
但是我在客户端的控制是,记录发送最近一条信息的时间
然后用 一个 timer 计时器。通过事件调用.每60秒测试一次当前时间距离最后一条信息的时间是不是超过了 5分钟,如果超过5分钟就关闭连接和流
但是当我关闭流的时候
服务端CPU占用率就 100%了
我感觉问题是在服务端的流read的时候出现的。
部分代码如下:
客户端连接服务端。采用 TCP连接
服务端在accept 到一个socket 后
建立一个线程 处理客户端的数据
处理部分代码如下
private void starlis() //开始监听,等待客户连接
{
tcplst = new TcpListener(this.serv);
tcplst.Start(); //开始监听
while(true)
{
sock = tcplst.AcceptSocket();
this.clientser = new Thread(new ThreadStart(serviceclient)); //增加一个接受客户段信息的线程
clientser.Start(); //转到处理方法
}
}
private void serviceclient() //接到连接后处理
{
Socket cc = this.sock;
if(cc.Connected)
{
net = new NetworkStream(cc); //实例化网络流 ,准备读取客户断发送到服务器的信息
StreamReader sr = new StreamReader(net);
this.sendWelcomeMsg(cc,this.linkopen);
ClientInfo cli = new ClientInfo(); //实例一个客户端信息
cli.setSock = cc;
cli.setConTime = System.DateTime.Now.ToString();
string data = null;
while(cc.Connected)
{
try
{
data = sr.ReadLine();
}
catch(Exception e)
{
e.ToString();
}
}
}
}
下面是客户端连接 和 超时后断开的代码!
1.客户端连接的代码
try
{
ip = IPAddress.Parse(serverIp);
servIP = new IPEndPoint(ip,Convert.ToInt32(serverPort));
clientTcp = new TcpClient();
clientTcp.Connect(servIP);
this.revice = new Thread(new ThreadStart(recivemsg));
net = clientTcp.GetStream();
revice.Start();
}
catch(Exception er)
{
MessageBox.Show("服务器连接错误");
}
2.超时后的处理代码(略过时间计算)
this.nowTime = System.DateTime.Now; //获取当前时间
TimeSpan ts = this.nowTime - this.oldTime; //当前时间减最后发的一条信息时间
int onLineMin = ts.Minutes; 获取中间的分钟差
if(onLineMin > 5) //如果超时。则断开连接
{
this.clientTcp.Close(); //就是这里出了问题,我不晓得为什么,
sr.Close(); //在执行了clientTcp.Close()后服务端依然可以检测到客户端,并且可以收到客户端发送的信息,那要断开什么才检测不到呢?,但是在执行了sr.close()之后,服务端CPU占用就 100%了,请问下如何断开才对呢?
net.Close();
revice.Abort(); //关闭线程(好象依然关闭不掉流)
}
谢谢各位高手。。我是第一次搞tcp。没有经验,。谢谢大家
各位高手希望能给一点提示 ,最好是在服务器端能检测到客户端已经断开
然后把该客户端的线程给关闭
...全文
相关推荐
C#联合Halcon混合编程源码:机器视觉与自动化设备插件式开发框架.pdf
C#联合Halcon混合编程源码:机器视觉与自动化设备插件式开发框架.pdf
C#联合halcon开发讲义和源代码.zip
HALCON联合C#实战案列,内有源码讲义,软件框架设计,HALCON代码生成,软件联合标定设置,创建测量模型,HALCON各功能整合到C#软件框架中,项目软件年打包发布,
C#联合Halcon通用快速开发框架
全部源码,可以根据项目配置窗口数量,选择窗口Halcon脚本,设置窗口CCD,可以查看编译修改Halcon脚本,调试相机,创建模板,可以查看历史检测数据,产量履历,保存历史图像,与三菱FX5U以太网通讯,相机是海康网口SDK,Halcon版本17.12,部分功能演示视频链接:https://www.bilibili.com/video/BV1Ju411y7SN/
C#联合halcon开发框架源码 拖拽式编程,无halcon基础也能上手,匹配,测量,条码识别,ocr,定位引导,对
C#联合halcon开发框架源码。 拖拽式编程,无halcon基础也能上手,匹配,测量,条码识别,ocr,定位引导,对位等,支持plc通讯,集成主流相机sdk,系统集成.
基于halcon+C#开发的视觉检测平台VisionAndMotionPro源码_C#_halcon
halcon通用框架,c#+halcon写的,是学习与参考非常好的项目源码,拖拉式设计,全公开源码


