using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using Common;
using System.Threading;
using System.IO; namespace BLL
{
public class SocketControl
{
bool isRun = false;
Socket socket;
IPEndPoint ipEndPoint;
Thread threadListen ;
byte[] buffer = new byte[]; private void Init()
{
ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), ConfigInformation.UdpPort);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Bind(ipEndPoint); } public void Start()
{
Init();
isRun = true;
threadListen = new Thread(Listen);
threadListen.Start();
} private void Listen()
{
int dataLength ; while (isRun)
{
try
{ if ( ( dataLength = socket.Receive(buffer) ) > )
{
Analyer(Encoding.ASCII.GetString(buffer, , dataLength));
} }
catch(Exception ex)
{
Helper.LogWrite(ex.Message);
}
}
} private void Analyer(string data)
{
if (data == "LoadPlan")
{
PlanControl.LoadPlan(ConfigInformation.PlanConfigPath);
}
} public void Stop()
{
isRun = false;
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
}
}

当执行Stop时出现提示:一个封锁操作被对 WSACancelBlockingCall 的调用中断。

后经网上查找,原因大概是因为你关闭socket时,socket.Receive(buffer); 仍出于读取状态。

改为下面就可以了:

if (socket.Poll(-,SelectMode.SelectRead))
{
if ( ( dataLength = socket.Receive(buffer) ) > )
{
Analyer(Encoding.ASCII.GetString(buffer, , dataLength));
}
}

最新文章

  1. GRUB、MBR名词解释
  2. js获取当前日期
  3. js中十进制数转换为16进制
  4. CentOS VirtualBox启动虚拟及报错:VirtualBox error: Kernel driver not installed (rc=1908)
  5. Recover Binary Search Tree [LeetCode]
  6. iScroll.js和Swiper.js联合使用时的插件冲突(滑动冲突)
  7. String一点小发现
  8. SQLSERVER中WITH(NOLOCK)详解
  9. 浅谈Androidclient项目框架
  10. 2018-2019-2 网络对抗技术 20165304 Exp5 MSF基础应用
  11. C# 通过java生成的RSA公钥加密和解密
  12. Spring,为内部方法新起一个事务,此处应有坑。
  13. iframe子父窗口相互操作方法或元素
  14. SSH加密原理、RSA非对称加密算法学习与理解
  15. JavaScript 模拟键盘事件和鼠标事件(比如模拟按下回车等)
  16. [日常] DNS的迭代查询过程
  17. javascritp 字符串截取
  18. 关于Android中根据ID名动态获取资源的两个方法
  19. LeetCode OJ:Reverse Linked List II(反转链表II)
  20. python cookbook第三版学习笔记十九:未包装的函数添加参数

热门文章

  1. DOS命令(可查看本机IP地址各个网卡号)
  2. Dev WPF使用总结
  3. JavaScript Dom基础
  4. mybatis多表连接在一起查询
  5. Java 枚举7种常见用法
  6. export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
  7. Excel列名 字母和数字的转换
  8. 在本地创建angular-ui/bootstrap项目
  9. c++ 覆盖、重载与隐藏
  10. ubuntu安装jdk