//服务器端的监听器
        private TcpListener tcpl = null; //用监听器获取连接进来的套接字(Socket)
   Socket newClient = tcpl.AcceptSocket();代码如上,每次断点调试的时候  走到 Socket newClient = tcpl.AcceptSocket();   这一句的时候就会停住, 直到监听到有连接的时候才会继续往下执行,  这样很不友好因为窗体一直无响应。。请问如何解决呢、??

解决方案 »

  1.   

    呵呵,进来请教楼主了!我现在也准备做一个关于socket的项目,对于这方面一知半解,我要做的内容是在公网上实现服务端和客户端的连接,然后服务端发送exe文件给客户端,客户端收到后,并执行exe。现在楼主研究的是不是这种问题啊,能帮忙说说思路吗?
    我很纠结,也很茫然!
    不好意思,占地了!
      

  2.   

    建议楼主不要用断点去调试socket,最好是用输出控制台的形式,至于窗体如何输出控制台楼主可以上网找,应为打断点调试有的时候socket会断开,这个我以前就遇到过,后来我都是用控制台来调试的.用控制台输出数据就可以知道接收的数据正不正确了..
      

  3.   

    楼主可以参考一下这些资料http://www.cnblogs.com/peterzb/archive/2009/07/03/1515950.html
      

  4.   


    /// <summary>
            /// 接受客户端信息
            /// </summary>
            private void ReceiveLicentInfo()
            {
                try
                {
                    //循环监听接受客户端发来的消息
                    while (true)
                    {
                        //byte[] byteData = new byte[1024];
                        string strInfo = null;
                        //int index = serviceSocket.Receive(byteData);
                        strInfo = sr.ReadLine();
                         Console.WriteLine("在这里打印接受到的数据,然后在与客户端发送的数据对比");
                        if (strInfo != null)
                        {
                            GetTextBox(strInfo);
                        }
                        Thread.Sleep(50);//程序暂停50毫秒,减少cpu的使用率
                    }
                }
                catch (Exception se)
                {
                    connSocket.Close();
                    MessageBox.Show("服务器:" + se.Message);
                }
            }
      

  5.   

    Console.WriteLine("在这里打印接受到的数据,然后在与客户端发送的数据对比")
      

  6.   

    异步方式解决
    Socket newClient = tcpl.AcceptSocket(); 放在新线程中而不是主线程Thread listenthread = new Thread(new ThreadStart(AcceptCon));
    listenthread.Start();
    private void AcceptCon()
    {
    while(true)
      {
       Socket newClient = tcpl.AcceptSocket(); 
      }
    }
    或是
    Socket newClient = tcpl.BeginAcceptSocket(); 
      

  7.   

    server用form?可以用异步或多线程,不过好像在客户端断开时有奇怪的问题,
      

  8.   

    Socket newClient = tcpl.AcceptSocket();是同步通讯模式,必然会阻塞的。改用异步通讯或者另开线程来做。