!!!奇怪!!! NetworkStream 为什么不阻塞? 我编写的是一个聊天程序的服务器端什么情况下才会阻塞呢?ReadByte和Read都不阻塞 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 NetworkStream就没有会引起阻塞的操作。如果调用Socket的一些方法,比如Accept,比如Receive,就会引起阻塞。这些方法的作用在MSDN都有很明确的说明。 用Receive能代NetworkStream 吗,如果能的话,就用Receive了 Socket的Receive方法还是不行,不阻塞线程 Socket cn = (Socket)conn; cn.Blocking = true; byte[] buf=new byte[1000]; int n; while(true) { n = cn.Receive(buf); Trace.WriteLine(n); } 就是没有数据时,线程被阻塞,直到有数据到达串口通信类SerialPort类的ReadByte就是这样 doComm 大哥这个是新开的线程函数吧 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); } } 楼上说的对,用到receive, accept会阻塞,就是会一直等待数据进来。要想不阻塞的话可以用多线程或是异步 accept是会阻塞,但在收发数据时,用receive不阻塞郁闷 判断阻塞方法很简单,我一直都在打印数据如果不阻塞,就一直打印,由于没用用sleep,程序很快就会死循环 如此看来,Receive不阻塞的原因就是一直有数据进来了,你应该很容易就可以从打印结果中看到的。 n = cn.Receive(buf); Trace.WriteLine(n); 打印n一直为0呀 installshield2010 如何添加.net4.0 关于启动已停止的线程 .net 面试题 当电脑超过好久不操作 就执行我的操作 该怎么做 类似于屏保 给datagridview添加的按钮列怎么设置每个按钮上显示的文字? 编译不可通过?short s1 = 1;short s2 = 2;short s3 = s1 + s2; why?? 页面上实例化表示层时出现这样的错误。 在应用程序中设置 IE窗口的鼠标形状? 简单的概念性问题,请指教:) ++intPeople++ 是什么意思?能举个例子吗?复者加分。 微软不厚道,大家说是不是? 关于窗体控件的判断treeview能否展开的问题
如果调用Socket的一些方法,比如Accept,比如Receive,就会引起阻塞。
这些方法的作用在MSDN都有很明确的说明。
cn.Blocking = true;
byte[] buf=new byte[1000];
int n;
while(true)
{ n = cn.Receive(buf);
Trace.WriteLine(n);
}
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);
}
}
郁闷
如果不阻塞,就一直打印,由于没用用sleep,程序很快就会死循环
Trace.WriteLine(n); 打印n一直为0呀