c#scoket服务端监听死循环怎么结束

minyue198966 2010-10-24 09:47:16
代码如下:
listener = new TcpListener(ip, _port);
listener.Start();
while (live)
{
s = listener.AcceptSocket(); //如果没有客户端连接,就停在这里,即使你while()括号里面设置了布尔值也没用
thr th = new thr(s);

}


求解啊。。高手来
...全文
314 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
我要坚强 2013-05-15
  • 打赏
  • 举报
回复
看到1,3楼只能以…………………………。
gwy9008 2013-05-15
  • 打赏
  • 举报
回复
我有一想法,在死循环外面加一个BOOL作为开关 bool b= false; while(true) { if(b) { break; } 下面再写其他代码,如果你要停止这个死循环, 改变变量b的值为true }
大黄鸭在发光 2010-10-24
  • 打赏
  • 举报
回复
服务端是循环监听,他监听到socket会开线程或异步来处理,做相应操作,与此同时需要循环回去好继续监听。监听listener.AcceptSocket(); 这句是阻塞的,有socket连进服务端才会继续往下执行
yudengchang 2010-10-24
  • 打赏
  • 举报
回复
楼上的AcceptSocket改称BeginAccept和EndAccept就可以解决的,再说你这不是死循环,是正常的执行.因为你要求程序停在那里的.就象你自己的注释说的,//如果没有客户端连接,就停在这里,即使你while()括号里面设置了布尔值也没用
,呵呵,不要把这当死循环来考虑.
最后一只恐龙 2010-10-24
  • 打赏
  • 举报
回复
那不是死循环,而是阻塞,也就是来一个连接那个AcceptSocket()才返回,不来连接就一直停在那个函数的地方,你在接收数据时也会遇到这个问题。有两种解决方案:
方法一:创建一个线程调用监听函数,这样阻塞时只阻塞那个线程,对主线程没有影响。
方法二:使用异步通信模式,也就是把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);
}
jieon 2010-10-24
  • 打赏
  • 举报
回复
listener .close()
minyue198966 2010-10-24
  • 打赏
  • 举报
回复
不是真正的死循环,,有办法解决的,,我老师让我用 begin、、end,,不过不会用
whb147 2010-10-24
  • 打赏
  • 举报
回复
死循环,就是没法结束吧
要不然还叫死循环??
代码转载自:https://pan.quark.cn/s/50df8825dc0d Tensilica Xtensa指令集架构手册是一份详尽阐述Xtensa指令集架构(ISA)的参考指南,它主要面向Tensilica公司所推出的处理器核心,尤其是LX106核,同时亦涵盖了ESP8266和ESP32等相关内容。该手册全面介绍了Xtensa处理器核心的指令集、配置选项、扩展能力以及将架构映射至硬件的详细情况。接下来将依据手册中所述的知识点进行深入解读。 ### Xtensa指令集架构(ISA) Xtensa指令集架构是Tensilica公司为其处理器产品设计的一套指令集,该指令集具备高度的可配置性和可扩展性。这一特性使得Xtensa ISA能够在不同的应用领域和硬件需求中进行个性化定制,以满足特定的功能与性能要求。 #### 可配置性(Configurability) Xtensa ISA的可配置性体现在用户可以根据实际需求对处理器的多个方面进行定制。这包括但不限于: - **指令集扩展**:用户可以根据特定的应用需求添加新的指令,从而提升处理特定任务的效率。 - **寄存器文件扩展**:根据应用需求,可以增加或优化处理器的寄存器数量和类型。 - **协处理器扩展**:通过集成特定的协处理器,可以将专门的计算任务卸载到协处理器上,从而提升整体性能。 #### 可扩展性(Extensibility) Xtensa ISA不仅可配置,还拥有卓越的可扩展性,它支持多种扩展,包括: - **状态扩展(State Extensions)**:允许处理器添加新的状态寄存器,以支持新的功能或增强现有功能。 - **指令扩展(Instruction Extensions)**:...
下载代码方式:https://pan.quark.cn/s/8779ceeac982 YOLOv5被认为是一种功能卓越且精确度高的目标检测系统,它在即时处理场景中展现出优越的性能。"基于YOLOv5的火灾检测"计划致力于运用这项尖端的计算机视觉方法,以达成对火焰和烟雾的有效辨识,进而起到防止及降低火灾事故的作用。在这个压缩文件里,用户能够获取到预先训练完成的模型,这表示使用者能够直接执行推理检测,无需从头开始训练模型。 我们现在将详细探讨YOLO(You Only Look Once)系统。YOLO是一种单阶段的目标检测方法,它将目标检测任务转化成回归问题,通过直接预测边界框和类别可能性来迅速识别图像中的物体。YOLOv5是这一系列的最新迭代,由Ultralytics团队研发,它在前几代的基础上进行了改进,包括更迅速的训练速率、更精准的检测以及更强的适应性。 YOLOv5的关键优化包含: 1. **数据增强**:应用了Mosaic数据增强技术,这是一种融合了随机缩放、翻转、裁剪及色彩调节的技巧,增强了模型的普遍适用性。 2. **更高效的架构**:运用了SPP-Block(Spatial Pyramid Pooling)和Path Aggregation Network (PANet)设计,提升了特征提取的效能和精确度。 3. **权重初始化**:采用了更优化的权重初始化策略,使模型在初始训练阶段就能更快地达到收敛。 4. **联合训练**:YOLOv5支持多尺度训练,即同步训练不同尺度的网络,以改善对小目标的检测效果。 5. **优化的损失函数**:使用了GIOU(Generalized IoU)损失函数,改进了边界框的定位。 针对火灾检测的应用,YOLOv...

111,129

社区成员

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

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

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