新建windowsFormsApplication工程,在form1.cs中的From1_Load中添加如下代码            make a = new make();
            Thread thread = new Thread(a.listen);
            thread.Start();
在工程中自己添加类    class make
    {
        Thread thread;
        public void listen()
        {
            const int port = 8000;
            //定义端口号
            TcpListener tcplistener = new TcpListener(IPAddress.Any, port);
            Console.WriteLine("侦听端口号: " + port.ToString());
            tcplistener.Start();
            //侦听端口号
            while (true)
            {
                Socket socket = tcplistener.AcceptSocket();
                //并获取传送和接收数据的Scoket实例
                Proxy proxy = new Proxy(socket);
                //Proxy类实例化
                thread = new Thread(new ThreadStart(proxy.Run));
                //创建线程
                thread.Start();
                //启动线程
            }
        }
    }
    class Proxy
    {
        Socket clientSocket;
        Byte[] read = new byte[1024];
        //定义一个空间,存储来自客户端请求数据包
        Byte[] Buffer = null;
        Encoding ASCII = Encoding.ASCII;
        //设定编码
        Byte[] RecvBytes = new Byte[4096];
        //定义一个空间,存储Web服务器返回的数据        public Proxy(Socket socket)
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            this.clientSocket = socket;
        }
        public void Run()
        {
            //用clientSocket通信
        }
    }然后运行,但是关闭主窗口后程序依然没关闭,如何解决?我猜是端口没关闭,tcp没断开,运行另一程序时显示“通常每个套接字地址(协议/网络地址/端口)只允许使用一次。”好像是端口依然被占应该在何处关闭端口断开tcp链接?

解决方案 »

  1.   

    更端口没关系
    是线程的问题 有线程没结束
    在决定退出前最好给你所有的线程一个“善终”(正常退出),如不能可以强制终端Abort(不推荐)楼主可以尝试在主线程中调用以下方法
    1.Application.Exit(); //好像只在主线程可以起作用,而且当有线程,或是阻塞方法的情况下,很容易失灵
    2.System.Environment.Exit(0); //无论在主线程和其它线程,只要执行了这句,都可以把程序结束干净
    3.this.Close();
    4.Application.ExitThread();有一个好使的就行了
      

  2.   

    system.Environment.Exit(0)在pc上可以,但是我在wince5.0,下不可以,其他的都不通,只有找正确的方法结束线程释放端口了?
      

  3.   


    thread = new Thread(new ThreadStart(proxy.Run));
    //定义为后台线程
    thread.IsBackground = true;
    //创建线程
    thread.Start();