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

异步TCP通讯,服务端在客户端多次连接请求时无效。
本帖最后由 iloli 于 2013-11-25 20:18:22 编辑
问题 :
    在服务端的client = tcpListener.EndAcceptTcpClient(iar) 处设断点,第一次客户端点连接时 服务器端代码可以命中断点,并且返回一个TcpClient对象。第二次客户端再点连接时,服务器端有时候可以命中断点,返回TcpClient对象。第三次铁定就无法命中断定了,客户端无法得到服务器的响应。求解!!!

服务端相关代码:

 public void Start()
        {
            tcpListener = new TcpListener(ipAddr, port);
            tcpListener.Start();    //打开监听

            Thread listenerThead = new Thread(ListenConnect);
            listenerThead.IsBackground = true;
            listenerThead.Start(); //打开监听线程
            
 
        }

        public void ListenConnect()
        {
            TcpClient client = null;

            while (true)
            {//循环监听
                IAsyncResult iar = tcpListener.BeginAcceptTcpClient(null, null);
                while (!iar.IsCompleted)
                {//轮询是否有用户接入,这里不需要有时间超时,因为监听要做的是一直循环等待用户接入的工作
                    Thread.Sleep(sleepMilliseconds);
                }

                try
                {
                    client = tcpListener.EndAcceptTcpClient(iar);
                }
                catch (Exception)
                {

                    throw;
                }


                //client = tcpListener.AcceptTcpClient();

                if (client != null)
                {
                &