你应用的是否是阻塞模式,因为该模式 Receive 会等到接收到请求后才会继续执行,否则就一直等待

解决方案 »

  1.   

    对于阻塞和非阻塞,我只是停留在了解的程度,
    没有特别的设置,好像看到说accept函数是阻塞模式的,
    他的执行会造成程序的阻塞。
    这是我参照课本和网上的例子和文档写的程序,
    基本所有的代码都在这了,
    里面的端口号写错了,
    其实都是1111的。
      

  2.   

    但是客户端连接不上,
    我打开服务端的监听,
    本来该有的在listbox中的提示一句只是偶尔会有,
    大部分时间直接卡死,
    然后客户端连接也连接不上,
    客户端程序走到  this.sock.Connect(this.myserver);
    报错,
    大概就是连接不上的意思。
      

  3.   

    貌似这句写错地方了吧?this.resock = this.sesock.Accept();//开始接受我已经很久没写了的忘记了。我觉得是写错了楼上的觉得呢?
      

  4.   

    while (flag)
    {
      .....
      .....
      //无限循环都加上这两句。
      Thread.Sleep(50);
      Application.DoEvents();
    }
      

  5.   

    之前有文章说需要把accept单独放到一个线程当中,
    但是不是很理解。
      

  6.   

    while (flag)
    {
      .....
      .....
      //无限循环都加上这两句。
      Thread.Sleep(50);
      Application.DoEvents();
    }
      

  7.   

    while (flag)
    {
      .....
      .....
      //无限循环都加上这两句。
      Thread.Sleep(50);
      Application.DoEvents();
    }
    还有报错信息具体是什么?
      

  8.   

    while (flag)
    {
      .....
      .....
      //无限循环都加上这两句。
      Thread.Sleep(50);
      Application.DoEvents();
    }
    还有报错信息具体是什么?
      

  9.   

    没报错,
    直接卡死,
    在中间加
    message.show()来标记,
    有时候能输出,有时候输出不了。
    而且一般加上输出标记,程序就能执行的多点,
    比如,不加输出标记,一般listbox中都不会出现 开始监听,
    但是加上输出标记,有时候就能输出。
    不知道为什么。
      

  10.   


          
                    while (flag&&this.resock.Connected)//先判断是否连接了再接受数据。。你放外面。。没用
                    {
                      
                        Byte[] r_data = new Byte[64];
                        int recvCount=this.resock.Receive(r_data, r_data.Length, 0);//先判断是否接受到了数据再进行处理
                        if(recvCount>0)
                 {
                        string str = System.Text.Encoding.BigEndianUnicode.GetString(r_data);
                        string temp=((IPEndPoint)resock.RemoteEndPoint).Address.ToString();
                        this.listBox1.Items.Add(temp+"\n");
                 }
                    }
               
      

  11.   

    没报错,
    直接卡死,
    在中间加
    message.show()来标记,
    有时候能输出,有时候输出不了。
    而且一般加上输出标记,程序就能执行的多点,
    比如,不加输出标记,一般listbox中都不会出现 开始监听,
    但是加上输出标记,有时候就能输出。
    不知道为什么。
      

  12.   


          
                    while (flag&&this.resock.Connected)//先判断是否连接了再接受数据。。你放外面。。没用
                    {
                      
                        Byte[] r_data = new Byte[64];
                        int recvCount=this.resock.Receive(r_data, r_data.Length, 0);//先判断是否接受到了数据再进行处理
                        if(recvCount>0)
                 {
                        string str = System.Text.Encoding.BigEndianUnicode.GetString(r_data);
                        string temp=((IPEndPoint)resock.RemoteEndPoint).Address.ToString();
                        this.listBox1.Items.Add(temp+"\n");
                 }
                    }
               
      

  13.   

    服务端用异步在Socket池,性能高
    客户湍用同步,容易实现,性能也不错
      

  14.   

    你没监听吧??
    this.sesock.Listen(10);
      

  15.   

    能具体说一下吗?
    是把socket做到一个 list中然后检测其中有连接的进行处理???
      

  16.   

    Socket本身支持异步编程,你应该看看那个Begin开头的一些列方法,参考MSDN你这个程序卡死的原因只有一个,那就是“this.resock = this.sesock.Accept();//开始接受”,这行代码不执行肯定不卡,一执行必卡,因为它是阻塞模式运行的,除非你在其它线程中执行,否则会阻塞当前线程。所谓的阻塞,就是当前线程卡住(界面的反映就是卡死),不让线程运行或响应任何消息,后续代码也不让执行。
      

  17.   

    http://blog.csdn.net/fengyarongaa/article/details/6631953
    参考
      

  18.   

    开线程做,要不然的话accept的时候会等待客户端响应才会继续,要不然线程就被阻塞在那个地方知道连接超时或者有客户端连接,你开线程做的话界面不会卡。
      

  19.   

    多谢各位,
    问题主要是ACCEPT方法的,
    把ACCEPT方法,放到targett函数中,
    让他在子线程中跑,
    程序就没问题了。
      

  20.   

    C# 服务器端怎么使用socket池啊?有没有代码