您的位置:程序门 -> .net技术 -> c#



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


询问关于异步socket服务器端问题[已结贴,结贴人:harvesthouhao]
发表于:2007-01-05 22:11:53 楼主
我做的是异步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.请问这是怎么回事??当链接客户端突出后,我应该怎样释放这个客户的链接对象?这个客户链接上来后建立的线程如何释放??   谢谢,盼复。。。
发表于:2007-01-05 22:45:521楼 得分:20
最好不要傻等,可以设置等待超时或者用其它的方式处理
发表于:2007-01-06 07:22:502楼 得分:0
你说的等待是监听等待还是收取数据等待?   我现在问题是,当有客户链接时,我就在监听回调函数中为这个用户建立一个线程,用来通讯。服务器端只做接收不做发送。那么,当客户退出后,服务器端cpu猛增100,这是什么原因造成的?   我应该如何释放每个客户链接时,为这个客户建立的socket和线程??   谢谢,盼复???
发表于:2007-03-27 21:33:393楼 得分:0
这个原因是死循环,当检测到数据为空或连接断开后把进程xx掉吧,昨天我也遇到了
发表于:2007-04-12 17:21:124楼 得分:0
正在看socket传文件过程,能否给一个简要的示例.
mailbox_han@126.com


快速检索

最新资讯
热门点击