我编写的是一个聊天程序的服务器端
什么情况下才会阻塞呢?
ReadByte和Read都不阻塞

解决方案 »

  1.   

    NetworkStream就没有会引起阻塞的操作。
    如果调用Socket的一些方法,比如Accept,比如Receive,就会引起阻塞。
    这些方法的作用在MSDN都有很明确的说明。
      

  2.   

    用Receive能代NetworkStream 吗,如果能的话,就用Receive了
      

  3.   

    Socket的Receive方法还是不行,不阻塞线程
      

  4.   

          Socket cn = (Socket)conn;
          cn.Blocking = true;
          byte[] buf=new byte[1000];
          int n;
          while(true)
          {        n = cn.Receive(buf);
            Trace.WriteLine(n);
          }
      

  5.   

    就是没有数据时,线程被阻塞,直到有数据到达串口通信类SerialPort类的ReadByte就是这样
      

  6.   

    doComm 大哥这个是新开的线程函数吧
      

  7.   

    doComm 是线程函数
        private void beginListin()
        {
          TcpListener listener = new TcpListener(endpoint);
          listener.Start();
          while (true)
          {
            Socket conn;
            conn = listener.AcceptSocket();
            //conn.Blocking = true;
            Trace.WriteLine("accept!!!");
            ParameterizedThreadStart ts = new ParameterizedThreadStart(doComm);
            Thread t = new Thread(ts);
            t.IsBackground = true;
            t.Start(conn);
          }
        }
      

  8.   

    楼上说的对,用到receive, accept会阻塞,就是会一直等待数据进来。要想不阻塞的话可以用多线程或是异步
      

  9.   

    accept是会阻塞,但在收发数据时,用receive不阻塞
    郁闷
      

  10.   

    判断阻塞方法很简单,我一直都在打印数据
    如果不阻塞,就一直打印,由于没用用sleep,程序很快就会死循环
      

  11.   

    如此看来,Receive不阻塞的原因就是一直有数据进来了,你应该很容易就可以从打印结果中看到的。
      

  12.   

            n = cn.Receive(buf);
            Trace.WriteLine(n); 打印n一直为0呀