c多线程socket开发一个服务器对多个客户端.doc

上传人:wux****ua 文档编号:8973771 上传时间:2020-04-02 格式:DOC 页数:3 大小:17.50KB
返回 下载 相关 举报
c多线程socket开发一个服务器对多个客户端.doc_第1页
第1页 / 共3页
c多线程socket开发一个服务器对多个客户端.doc_第2页
第2页 / 共3页
c多线程socket开发一个服务器对多个客户端.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述
下面直接讲多线程服务器端开发。(直接给代码和解释吧) 首先定义一个新类,用于传递(连接socket )和接受发送数据。 class ClientThread Encoding encoding = Encoding.GetEncoding(GB2312); /解码器(可以用于汉字) private Socket client; private string data = null; private byte receiveBytes = new byte1024;/服务器端设置缓冲区 private int recCount; /传递连接socket public ClientThread(Socket ClientSocket) this.client = ClientSocket; /数据处理接口 public void ClientServer() try while (true) recCount = client.Receive(receiveBytes, receiveBytes.Length, 0);/从客户端接收信息 if (recCount != 0)/当服务器端的缓冲区接收到的信息不为空时 data = encoding.GetString(receiveBytes, 0, recCount); /接收数据 /接收数据成功后给客户端返回OK client.Send(encoding.GetBytes(OK), 2, 0); else break; catch (Exception ex) Console.Write(出现异常:); Console.WriteLine(ex.ToString(); Console.ReadLine(); client.Close(); 开始服务器端的多线程开发。 string HostName = Dns.GetHostName(); /得到主机名 IPHostEntry IpEntry = Dns.GetHostEntry(HostName); /得到主机IP string strIPAddr = IpEntry.AddressList0.ToString(); IPAddress ip = IPAddress.Parse(strIPAddr); /把ip地址字符串转换为IPAddress IPEndPoint ipep = new IPEndPoint(ip, 9001); /用指定的端口和ip newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newsock.Bind(ipep);/绑定 newsock.Listen(10);/监听 while (true) try /当有可用的客户端连接尝试时执行,并返回一个新的socket Socket client = newsock.Accept(); /创建消息服务线程对象,并把连接socket赋于ClientThread ClientThread newclient = new ClientThread(client); /把ClientThread 类的ClientService方法委托给线程 Thread newthread = new Thread(new ThreadStart(newclient.ClientServer); / 启动消息服务线程 newthread.Start(); catch /连接中断或者连接失败 这样就完成了多线程socket的开发。一个服务器能对多个客户端:当有客户端要求连接的时候创建新的线程去处理对应的客户端。但是这有一个缺点是,当有N个连接客户端的时候,就有N个线程,会对程序性能以及计算机性能影响很大。下面用线程池的方法对线程进行线程管理(限制最大的线程数,把空闲的线程重新使用,以提高性能)。 使用system.net.socket命名空间下的threadpool类。 Thread newthread = new Thread(new ThreadStart(newclient.ClientServer); newthread.Start(); 将以上程序代码换成threadpool的静态方法 QueueUserWorkItem(这个方法默认最多能有25个线程,你可以根据你自己的需要进行设置,这里不详说了): ThreadPool.QueueUserWorkItem(new WaitCallback(newclient.ClientServer); 这个方法要求被调用的函数至少有一个参数object。比如:public void ClientServer(object 0)
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!