代码如下:
listener = new TcpListener(ip, _port);
listener.Start();
while (live)
{
s = listener.AcceptSocket(); //如果没有客户端连接,就停在这里,即使你while()括号里面设置了布尔值也没用
thr th = new thr(s); }
求解啊。。高手来
listener = new TcpListener(ip, _port);
listener.Start();
while (live)
{
s = listener.AcceptSocket(); //如果没有客户端连接,就停在这里,即使你while()括号里面设置了布尔值也没用
thr th = new thr(s); }
求解啊。。高手来
解决方案 »
- C#如何让鼠标右键出现复制把选择的内容复制?
- 使用 DevExpress.XtraGrid 几个小问题
- Vista以及Windows 7下的文件拖动问题?
- WCF框架下客户端DataGridView的数据怎样提交保存?
- 请高手指点一个问题!谢谢先!!!(txtbox的内容怎么写入数据库中表的指定列)
- [提问] C#如何获取IIS framework runtime version?
- dataGridView删除行的问题
- 请教一个简单sql语句问题:怎么能够查出一个表里的重复的各条数据呀!谢谢了
- 如何将Char[]转换为Byte[]?
- 在子线程显示模态对话框的问题
- hm文件
- 如何用HTTP实现将PDA中的文件传送至远程服务器?
方法一:创建一个线程调用监听函数,这样阻塞时只阻塞那个线程,对主线程没有影响。
方法二:使用异步通信模式,也就是把AcceptSocket改称BeginAccept和EndAccept,调用BeginAccept时,第一个参数是一个回调函数,指明来一个连接后需要进入哪个函数执行,然后在那个函数中执行EndAccept。接受一个连接后,别忘了再Begin一下,否则再来连接就不能接受了。示例代码如下: public bool StartListening(string strIP, int nPort)
{
IPAddress _ipAddress = IPAddress.Parse(strIP);
IPEndPoint ip = new IPEndPoint(_ipAddress, nPort); try
{
sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sListener.Bind(ip);
sListener.Listen(nPort); // 回调函数,当有连接时进入AcceptEnd函数执行
AsyncCallback asyncCallback = new AsyncCallback(AcceptEnd);
sListener.BeginAccept(asyncCallback, sListener); return true;
}
catch
{
return false;
}
} public void AcceptEnd(IAsyncResult pIAsyncResult)
{
// 接受连接,并放入哈希表htSessions
Socket socket = sListener.EndAccept(pIAsyncResult);
ClientSocket session = new ClientSocket(socket);
htSessions.Add(session.nID, session); // 开始接收客户端数据
session.socketClient.BeginReceive(byRecvBuf, 0, byRecvBuf.Length, SocketFlags.None, new AsyncCallback(ReceiveData), session.socketClient); // 重新开始准备接受连接
AsyncCallback asyncCallback = new AsyncCallback(AcceptEnd);
sListener.BeginAccept(asyncCallback, sListener);
}
,呵呵,不要把这当死循环来考虑.
bool b= false;
while(true)
{
if(b)
{
break;
}
下面再写其他代码,如果你要停止这个死循环, 改变变量b的值为true
}