c#多线程socket开发(一个服务器对多个客户端).docx

c#多线程socket开发(一个服务器对多个客户端).docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
下面直接讲多线程服务器端开发。 (直接给代码和解释吧) 首先定义一个新类,用于传递(连接 socket )和接受发送数据。 class ClientThread { Encoding encoding = Encoding.GetEncoding(GB2312); // 解码器(可以用于汉字) private Socket client; private string data = null; private byte[] receiveBytes = new byte[1024];// 服务器端设置缓冲区 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.AddressList[0].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 个线程,会对程序性能以及计算机性能影响很大。下面用线程池的方 法对线程进行线程管理(限制最大的线程数,把空闲的线程重新使用,以提高性能) 。 使用 .socket 命名空间下的 threadpool 类。 Thread newthread = new Thread(new ThreadStart(newclient.ClientServer)); newthread.Start(); 将以上程序代码换成 threadpool 的静态方法 QueueUserWorkItem(这个方法默认最 多能有 25 个线程,你可以根据你自己的需要进行设置,这里不详说了) : ThreadP

文档评论(0)

明若晓溪 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档