我写了一个多线程通信程序。  一个服务器监听 客户端连接到服务器 实现通信。可能有多个客户端连接过来
 我是这样想的 :
  客户端连接到我的服务器。 我使用同一个线程(ThreadReceive ) 处理客户端的数据   
  private void SocketListen()
        {
            while (true)
            {
                try
                {
                    Thread.Sleep(20);
                    sock = socket.Accept();
                    if (sock != null)
                    {
                        ThreadReceive = new Thread(new ThreadStart(new SocketReceive(sock).SocketReceive_Main));
                        ThreadReceive.Priority = ThreadPriority.AboveNormal;
                        ThreadReceive.Start();
                    }
                }
                catch (Exception e)
                {
                    Mon_Log.WriteLog(StrLog, "SocketListen()出现如下错误:" + e.Message);
                }
            }
        }
以下代码是具体处理接收到的数据。 我将接收到的数据记录在日志文件中
namespace Server.ServerLogic
{
    public class SocketReceive
    {
        private Socket sock;
        //数据缓存,存储接收到的客户端数据
        private byte[] dates = new byte[4000];
        //数据缓存的长度
        private int datesLength;
        //日志文件位置
        private string StrLog = "逻辑层日志\\SocketReceive信息";
        //线程循环锁
        private bool StateReceive = true;        public SocketReceive(Socket _sock)
        {
            this.sock = _sock;
        }        public void SocketReceive_Main()
        {
            while (StateReceive)
            {
                Thread.Sleep(20);
                try
                {
                    datesLength = sock.Receive(dates);
                    for (int i = 0; i < 100; i++)
                    {
                        Thread.Sleep(20);
                        Mon_Log.WriteLog(StrLog, Mon_Public.GetString(dates, datesLength));
                    }
                }
                catch (Exception e)
                {
                    this.StateReceive = false;
                    Mon_Log.WriteLog(StrLog, "SocketReceive()出现如下错误:" + e.Message);                    
                }
            }
        }
    }
}我想知道  这样如果有多个客户端连接到我的服务器。 。 我的服务器是使用同一个线程处理吗?  因为我之前是 一个客户端连接过来我就分配一个子线程去专门处理这个客户端的数据  导致CPU使用率一直居高不下。 所以我现在想尽量少使用线程。

解决方案 »

  1.   

    以下是我 用两个客户端 同时连接服务器    
    一个客户端发送      d7 d1 00 00 00 09 00 99  
    另外一个客户端发送  d7 d1 00 00 00 01 00 01
    再先关闭一个客户端   过一会 关闭另外一个   文档中记录的情况
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:17]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:18]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 9 0 99 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:19]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:20]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:21]   d7 d1 0 0 0 1 0 1 
    [2011-04-12 14:25:27]   SocketReceive()出现如下错误:远程主机强迫关闭了一个现有的连接。
    [2011-04-12 14:25:39]   SocketReceive()出现如下错误:远程主机强迫关闭了一个现有的连接。
      

  2.   

     2楼  因为你的是同步的 ,不是异步的,所以你写了多少线程 ,就用了多少线程。 
        ThreadReceive = new Thread(new ThreadStart(new SocketReceive(sock).SocketReceive_Main));
                            ThreadReceive.Priority = ThreadPriority.AboveNormal;
                            ThreadReceive.Start();每个客户端连接过来。 我都是用同一个线程  ThreadReceive  处理   只是每次我都会重新初始化
    ThreadReceive = new Thread(new ThreadStart(new SocketReceive(sock).SocketReceive_Main));
     这个对象。   这样想来的话  我第一个ThreadReceive 还没有处理完  又重新初始化了 ThreadReceive 这个对象。  这样是不是有两个 ThreadReceive   也就是2个线程在同时运行呢?