急!Socket通信,怎么停止.socet.receive()

dubuxunmei 2010-03-23 09:29:32
各位:
有两个线程,一个是doListenThread(),侦听客户端连接的线程
一个是doReceiveDataThread(),接受客户段信息的线程

在运行过程中,画面上有个停止按钮,
想一点按钮,就停止接受, 但是clientSocket.Receive(),是不停的运行的,请问怎么正确终止它




/// 侦听客户端连接
private void doListenThread()
{
clientSocket= localListener.AcceptSocket();//等待侦听
//一旦有新的连接后,启动接受数据线程
thread = new Thread(new ThreadStart(doReceiveDataThread));
thread.Start();

}

//接收客户段信息
private void doReceiveDataThread()
{
while(true){

clientSocket.Receive(buffer);//不停的等待接受
}
}
...全文
837 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
onlyprice 2010-03-23
  • 打赏
  • 举报
回复
.Blocking = false;
dubuxunmei 2010-03-23
  • 打赏
  • 举报
回复
.Blocking = false;
ZSW53362465 2010-03-23
  • 打赏
  • 举报
回复
用BeginRecive
不过就是你用了这个,控制的时候还是需要信号来阻塞控制的
dubuxunmei 2010-03-23
  • 打赏
  • 举报
回复
怎么设置成非阻塞模式?
ZSW53362465 2010-03-23
  • 打赏
  • 举报
回复
定义一个开关
private bool flag=false;
private void doReceiveDataThread()
{
while(true){
if(!flag)
break;
clientSocket.Receive(buffer);//不停的等待接受
}
}
当你按按钮的时候把flag的值设为false
这样在while循环里就会进入新加的那个IF里,就会跳出了
liangchencf 2010-03-23
  • 打赏
  • 举报
回复 1
最好做成非阻塞模式的。
把你的receive方法改成下边的。这样线程就不会阻塞了

System.IO.MemoryStream ms = new System.IO.MemoryStream();
while (socket.Poll(0, SelectMode.SelectRead))
{

byte[] buf = new byte[8192];
res = socket.Receive(buf);
if (res > 0)
{
ms.Write(buf, 0, res);
}
}

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧