日期:2014-05-17  浏览次数:20888 次

UDP 服务器端 多线程 是否会合适?

下面是简单的服务器端代码,就是不停接受客户端的数据,并打印在控制台上:

static void Main(string[] args)
        {
            IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
            IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 60000);
            Socket s = new Socket(endPoint.Address.AddressFamily,SocketType.Dgram,ProtocolType.Udp);
            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            EndPoint senderRemote = (EndPoint)sender;

            s.Bind(endPoint);
            byte[] msg = new Byte[256];
            Console.ForegroundColor = ConsoleColor.Red;  //设置字体颜色为红色
            Console.WriteLine("Waiting...");
            
            LogMessage message = new LogMessage();
            
            while(true)
            {
                s.ReceiveFrom(msg, ref senderRemote);
                string deviceID = Convert.ToString(msg[5], 16);
                //string rt = byteToHexStr(msg);
                string iPstr = senderRemote.ToString();
                ipStringSplit = iPstr.Split(':') ;
                Console.ForegroundColor = ConsoleColor.Green;                

                message.DeviceID = deviceID;
                message.DeviceIP = ipStringSplit[0];
                message.DevicePort =ipStringSplit[1];
                log.Info(message);
            }         
        }


先描述下大概功能
有多个客户端,各自定时向服务器端发送数据包,服务器端把每个客户端发来的数据,打印在控制台上,在服务器端同时,将每条数据包写入日志...

有几个问题不明
1  服务器端需要为每个客户端都建立一个线程,专门处理该客户端的数据包不?
2  UDP的服务端,什么情况下,使用多线程处理每个客户端的数据比较合适?