客户端连服务端多线程(TCP连接),客户端断开连接后服务端CPU占用100%

flybirdlc flybirdlc 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
出现的问题是
客户端连服务端多线程(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。没有经验,。谢谢大家
各位高手希望能给一点提示 ,最好是在服务器端能检测到客户端已经断开
然后把该客户端的线程给关闭
...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部
flybirdlc
C# 111,128 成员 642,536 内容