VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1060|回复: 3

询问关于异步Socket服务器端问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-9-25 09:30:01 | 显示全部楼层 |阅读模式
我做的是异步socket服务器端。大致代码如下:

private void form_load()
{
  获取服务器IP和监听端口
  启动监听线程
}

private void listening()
{
  while(true)
  {
     lisdone.rest();
     mysocket.beginaccept(调用异步监听回调函数);
     lisdone.waitone();
  }
}

private void acceptcallback()//异步回调函数
{
  为当前链接客户启动接收线程(只要有客户链接就为这个客户启动一个线程)
}

private void receivedata()
{
  while(true)
{
   try
  {
   receivedone.rest();
   mysocket.beginreceive(调用接收回调函数)
   receivedoen.waitone();
   }
  catch
  {
   mysocket.shutdown(shutdown.receive);
   mysocket.close();
   return;
   }
}
}

private void receivecallback()
{
  receivedone.set();
  接收数据
}

以上就是大致我做的SOCKET服务器端从客户链接到接收客户数据的过程。现在我有个问题是 我现在的方法为只要有客户链接。就在监听回调函数中为这个客户建立一个接收此客户的线程。此程序也可以正常接收。但是当这个客户中途退出后,我的程序占用CPU就猛增到100.请问这是怎么回事??当链接客户端突出后,我应该怎样释放这个客户的链接对象?这个客户链接上来后建立的线程如何释放?? 谢谢,盼复。。。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-25 21:15:01 | 显示全部楼层
最好不要傻等,可以设置等待超时或者用其它的方式处理
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-9-26 11:30:01 | 显示全部楼层
你说的等待是监听等待还是收取数据等待? 我现在问题是,当有客户链接时,我就在监听回调函数中为这个用户建立一个线程,用来通讯。服务器端只做接收不做发送。那么,当客户退出后,服务器端CPU猛增100,这是什么原因造成的? 我应该如何释放每个客户链接时,为这个客户建立的SOCKET和线程?? 谢谢,盼复???
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-27 20:00:01 | 显示全部楼层
这个原因是死循环,当检测到数据为空或连接断开后把进程XX掉吧,昨天我也遇到了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表