欢迎来到天天文库
浏览记录
ID:24450533
大小:68.18 KB
页数:3页
时间:2018-11-14
《c多线程socket开发一个服务器对多个客户端》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、下面直接讲多线程服务器端开发。(直接给代码和解释吧)首先定义一个新类,用于传递(连接socket)和接受发送数据。classClientThread{Encodingencoding=Encoding.GetEncoding("GB2312");//解码器(可以用于汉字)privateSocketclient;privatestringdata=null;privatebyte[]receiveBytes=newbyte[1024];//服务器端设置缓冲区privateintrecCount;//传递连接socket
2、publicClientThread(SocketClientSocket){this.client=ClientSocket;}//数据处理接口publicvoidClientServer(){try{while(true){recCount=client.Receive(receiveBytes,receiveBytes.Length,0);//从客户端接收信息if(recCount!=0)//当服务器端的缓冲区接收到的信息不为空时{data=encoding.GetString(receiveBytes,0,r
3、ecCount);//接收数据//接收数据成功后给客户端返回OKclient.Send(encoding.GetBytes("OK"),2,0);}else{break;}}}catch(Exceptionex){Console.Write("出现异常:");Console.WriteLine(ex.ToString());Console.ReadLine();}client.Close();}}开始服务器端的多线程开发。stringHostName=Dns.GetHostName();//得到主机名IPHostEn
4、tryIpEntry=Dns.GetHostEntry(HostName);//得到主机IPstringstrIPAddr=IpEntry.AddressList[0].ToString();IPAddressip=IPAddress.Parse(strIPAddr);//把ip地址字符串转换为IPAddressIPEndPointipep=newIPEndPoint(ip,9001);//用指定的端口和ipnewsock=newSocket(AddressFamily.InterNetwork,SocketType
5、.Stream,ProtocolType.Tcp);newsock.Bind(ipep);//绑定newsock.Listen(10);//监听while(true){try{//当有可用的客户端连接尝试时执行,并返回一个新的socketSocketclient=newsock.Accept();//创建消息服务线程对象,并把连接socket赋于ClientThreadClientThreadnewclient=newClientThread(client);//把ClientThread类的ClientServic
6、e方法委托给线程Threadnewthread=newThread(newThreadStart(newclient.ClientServer));//启动消息服务线程newthread.Start();}catch{//连接中断或者连接失败}}}这样就完成了多线程socket的开发。一个服务器能对多个客户端:当有客户端要求连接的时候创建新的线程去处理对应的客户端。但是这有一个缺点是,当有N个连接客户端的时候,就有N个线程,会对程序性能以及计算机性能影响很大。下面用线程池的方法对线程进行线程管理(限制最大的线程数,把
7、空闲的线程重新使用,以提高性能)。使用system.net.socket命名空间下的threadpool类。Threadnewthread=newThread(newThreadStart(newclient.ClientServer));newthread.Start();将以上程序代码换成threadpool的静态方法QueueUserWorkItem(这个方法默认最多能有25个线程,你可以根据你自己的需要进行设置,这里不详说了):ThreadPool.QueueUserWorkItem(newWaitCallb
8、ack(newclient.ClientServer));这个方法要求被调用的函数至少有一个参数object。比如:publicvoidClientServer(object0)
此文档下载收益归作者所有