黑马程序员技术交流社区

标题: 两个关于Socket的问题。。。求教了 [打印本页]

作者: 陈家辉    时间: 2013-8-10 19:07
标题: 两个关于Socket的问题。。。求教了
本帖最后由 陈家辉 于 2013-8-10 22:20 编辑

最近开始学习socket了,有几点疑问没有弄清楚,不知道怎么解决,

问题一:如何有效监听客户端连接状态,
网络这个东西不稳定因素太多,要实时监听客户端的连接状态有没有什么好的方法,我现在没办法,只有在客户的服务线程中再另起一个线程去每隔几秒发送几个字节给客户端,让服务器客户端保持通信, 这个时候又会多出来一倍的线程,如果用这种方法怎么管理这些线程呢?客户下线掉线时这些线程怎么弄...,这个问题纠结了好些日子。

问题二:多客户端连接过后 服务器断程序内存占用很严重,怎么该?

作者: 许庭洲    时间: 2013-8-10 19:35
//服务器启动并监听客户端请求:
//通过IP地址和端口创建网络节点对象
   IPAddress address=IPAddress.Parse(服务器Ip地址);
   IPEndPoint endpoint=new IPEndPoint(address,int.Parse(端口));
//创建一个套接字(工具,固定代码)
   Socket socketWatch =new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//将套接字绑定到唯一的网络节点上
   socketWatch.Bind(endpoint);
//设置监听队列长度
   socketWatch.Listen(10);

//通过线程为每一个与之连接的客服端分配一个Socket对象:
   Thread threadWatch=new Thread(WatchConnecting);//创建负责监听的线程,并传入监听方法
   threadWatch.IsBackground=true;//设置为后台线程
   threadWatch.Start();//开启线程

   //创建监听方法
   void WatchConnecting()
   {
     while(true)
     {
       //开始监听,一旦监听到客户端的连接请求,就分配一个与之对应的通信套接字
       Socket sokConnection=socketWatch.Accept();
       MessageBox.showDialog("有新的客户端成功连接!");
     }
   }





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2