server=tmpserver
//然后新建一个进程,对server进行通信操作
实际还是操作的tmpserver异步=同步+多线程

解决方案 »

  1.   

    Thread t= new Thread(start) //start是对server操作的一个方法改成Thread t= new Thread(new ThreadStart(start)) //start是对server操作的一个方法
    t.Start();
      

  2.   

    哪我把tmpserver重新定义行不行??
    我是新建了一个类了,怎么还会是一样??
      

  3.   

    Thread t= new Thread(new ThreadStart(start)) //start是对server操作的一个方法
    t.Start();这个我知道,我上面的代码只是大概写一下,我只要是想问我这个实现方法行不行??
      

  4.   

    public class Test
    {
       private TcpListener server;
       private bool isserver; 
       private Thread thread;   pubic Test()
       {
           int port = 13000;
           IPAddress localAddr = IPAddress.Parse("127.0.0.1");
           this.server = new TcpListener(localAddr, port);
           this.thread = new Thread(new ThreadStart(this.Start));
       }   //开始异步监听请求
       public void StartServer()
       {
           this.isserver=true;
           this.thread.Start();
       }   //停止监听
       public void StopServer()
       {
           this.isserver=false;
           this.thread.Abort();
       }   private void Start()
       {
           this.server.Start();
           while(this.isserver)
           {
               TcpClient client=this.server.AcceptTcpClient();
               new Thread(new ThreadStart(new HandleRequest(client))).Start();
           }
       }
    }pubic class HandleRequest
    {
       private TcpClient client;   public HandleRequest(TcpClient client)
       {
           this.client = client;
       }   public void Handle()
       {
           this.client.GetStream().Read(...);
           ...
           //在这里处理请求
       }
    }
      

  5.   

    >>>哪如果服务器同时和几个客户端发送数据会不会很乱并出错啊?当然不会,看我上面的程序。上面的程序为异步监听,异步处理请求。TcpClient client=this.server.AcceptTcpClient();
    new Thread(new ThreadStart(new HandleRequest(client))).Start();会为每个连接生成一个TcpClient对象并异步处理之!
      

  6.   

    请问StartServer()、StopServer()、Handle()
    是什么时候调用的????
    BeginXXX、EndXXX之间哪些关系又是怎样的??不是说用异步发送数据要用这些的吗?
      

  7.   

    tmpserver.Start()是不能写在while循环内的
    应该是调用tmpserver.Start()后,用while循环取队列中的传入连接进行处理:
    public static void Main()
    {    
      try
      {
        Int32 port = 13000;
        IPAddress localAddr = IPAddress.Parse("127.0.0.1");
        TcpListener server = new TcpListener(localAddr, port);
        server.Start();
        while(true) 
        {
          TcpClient client = server.AcceptTcpClient();//获取队列中的传入连接      
          //对该连接进行处理
          //...
          client.Close();
        }
      }
      catch(SocketException ex)
      {
        MessageBox.Show(ex.Message);
      }
    }
      

  8.   

    使用异步处理的话,建议你先看看msdn,理解一下委托(delegate)和回调函数(callback)
      

  9.   

    >>>>>>>>>请问StartServer()、StopServer()、Handle()是什么时候调用的????1、StartServer()在你的服务程序开始监听请求的时候调用
    2、StopServer()在你的服务程序停止监听请求的时候调用
    3、Handle()不用你显示调用,当你的服务程序监听到客户端请求后会自行调用,你要做的是在Handle()方法中写入与客户端通讯的逻辑!try it
      

  10.   

    BeginXXX、EndXXX只是系统对多线程调用的封装而已!
      

  11.   

    其实关于异步socket服务端的用法,帮助里有很详细的解释,不妨花点时间看看,照着例子实现一遍就明白了。
      

  12.   

    to: qpl007(蓝色闪电) 
    我试了,编译下面一条时,因为ThreadStart的参数只用方法,所以提示错误
    new Thread(new ThreadStart(new HandleRequest(client))).Start();
    还有还是不明为什么Handle()会自动调用??
    to: losthold(呵呵) 
    MSDN的例子不完整的,只是针对说一部分,没有总体来说,所以看不懂!!
      

  13.   

    不好意思,笔误:

    new Thread(new ThreadStart(new HandleRequest(client))).Start();
    改成
    new Thread(new ThreadStart(new HandleRequest(client).Handle)).Start();这下你明白为什么Handle()会自动调用了吧?