问题:System.Net.Sockets.SocketException: 一个封锁操作被对 WSACancelBlockingCall 的调用中断。

背景

使用ThreadStart委托线程监听socket通信,在通信完毕后调用saveTrainResult提交信息

现在的问题

socket通信成功且数据解析成功,但在调用saveTrainResult方法时报异常信息:

System.Net.Sockets.SocketException: 一个封锁操作被对 WSACancelBlockingCall 的调用中断。

at System.Net.Sockets.Socket.Accept () [0x00000] in <filename unknown>:0

at SocketServer.Listen () [0x00000] in <filename unknown>:0

相关代码如下:

1、使用SocketServer.StartListening () 启动socket(TCP)服务与Listen监听

 1 public static string data = null;  2 private static Socket listener=null; 3 public static Thread myThread = null;
 4 private static Socket workSocket=null;
 5
 6 /// <summary>
 7 /// 开启socket
 8 /// </summary>
 9 /// <returns>The listening.</returns>
10 public static object StartListening(){
11     LoadInitFile.initClientParams ();
12
13     IPAddress ipAddress = IPAddress.Parse (LoadInitFile.Client_Ip);
14
15     IPEndPoint localEndPoint = new IPEndPoint (ipAddress, 3001);
16     // Create a TCP/IP socket.
17     if (listener == null) {
18         listener = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
19         listener.Bind (localEndPoint);
20         listener.Listen (10);
21     }
22
25
26     try{
27         ThreadStart myThreadDelegate = new ThreadStart (Listen);
28         //实例化新线程
29         myThread = new Thread (myThreadDelegate);
30
31         myThread.IsBackground = true;
32         myThread.Start ();
33
34     }catch(Exception e){
35             log.log("Thread exception:"+e.ToString());
36     }
37
38     return 1;
39 }
40
41 private static int sleepTime=1000;
42 private static string caseMsg = "";
43 public static void Listen() {
44     // Data buffer for incoming data.
45     byte[] bytes = new byte[1024];
46     try {
47         workSocket= listener.Accept ();
48         while (true) {
49             data = null;
50             int msgLen = 0;
51             int bytesRec = workSocket.Receive (bytes);
52             data = Encoding.UTF8.GetString (bytes, 0, bytesRec);
53            //循环读取数据         ....
73             if (!string.IsNullOrEmpty(data)) {
74                 ReceiveMsg (data);
75                 break;
76             }
78             workSocket=null;
80         }
81     } catch (Exception e) {
82         log.log (e.ToString ());
83     }finally{
84         CloseSocketServer();
85         PreparationWorkFun prs=new PreparationWorkFun();
86         prs.SaveTrainResult();
87     }
88 }

2、CloseSocketServer

 1 /// <summary>
 2 ///  关闭socket
 3 /// </summary>
 4 public static void CloseSocketServer(){
 5     try{
 6
 7         if (listener != null) {
 8             listener.Shutdown(SocketShutdown.Both);
 9             listener.Close();
10         }
11     }catch(SocketException e){
12         listener.Close();
13     }finally{
14         listener=null;
15     }
16 }

3、PreparationWorkFun.SaveTrainResult

1 DatasToServer dataToServer = new DatasToServer();
2 StartCoroutine(dataToServer.SaveTrainResult(DatasFromServer.CurrentTrainResult));

4、dataToServer.SaveTrainResult

 1 public IEnumerator SaveTrainResult(TrainResultEntity tre){
 2     if(tre == null){
 3         yield return 0;
 4     }
 5
 6     string path = DataSourceUtil.SaveTrainResultPath (tre);
 7     if(string.IsNullOrEmpty(path)){
 8         yield return 0;
 9     }
10
11     WWW www = new WWW (path);
12     yield return www;
13
14     if (www != null) {
15
16         if(!string.IsNullOrEmpty(www.error)){
17
18             Debug.Log("实训考核结果保存失败!" + www.error);
19
20             www.Dispose();
21
22             www = null;
23         }else{
24             Debug.Log("实训考核结果保存成功!" + www.text);
25             DatasFromServer.CurrentTrainResult.Id = int.Parse(www.text);
26         }
27     }
28     www = null;
29
30 }    

 

时间: 2024-08-05 19:32:42

问题:System.Net.Sockets.SocketException: 一个封锁操作被对 WSACancelBlockingCall 的调用中断。的相关文章

解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接

开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决方案都是千篇一律互相转发的,并且没有明确的解决方案或者按照,各个博客中的解决方案都没能解决这个问题. 为此我整整浪费了一天时间用来解决这个问题,而且用了最笨的办法一点点的尝试网上所查到的方案.对于精研WCF来说的这可能是一个小问题,但是对于仅仅了解wcf,一知半解的会很困惑.将解决方案贴出来希望能帮

未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试

报错:未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试 → 尝试以"管理员身份"运行程序,不行.→ 点击菜单下的"运行",输入"cmd",来到控制台.→ 输入"netstat -a"查看端口是否被占用,发现应用程序中所使用的端口已被占用.→ 更改应用程序的端口,问题解决.

at System.Net.Sockets.Socket.Connect

Application Exception System.Net.Sockets.SocketException Connection refused Description: HTTP 500.Error processing request. Details: Non-web exception. Exception origin (name of application or object): System. Exception stack trace: at System.Net.Soc

C#对一个XML操作的实用类

using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Data; using System.IO; namespace eBlog.Common.Files { public class XmlHelper { protected string strXmlFile; protected XmlDocument objXmlDoc = new XmlDoc

System.Net.Sockets.Socket SendAsync System.ObjectDisposedException: Cannot access a disposed object.

发生未处理的域异常! System.ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net.Sockets.Socket'. at System.Net.Sockets.Socket.SendAsync(SocketAsyncEventArgs e) 在进行Socket长连接时,若服务器或客户端出现异常时,另外一端对Socket对话进行操作时,程序会出现无法访问已释放的对象的问题.例如客

如何用一个app操作另外一个app.比如微信群控那样的

如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007186891/如何用一个app操作另外一个app比如微信群控那样的.html

刚整了一个数据库操作类,但是可以用吗?

今天闲来无事,把以前自己搞的一个数据库操作类重新整理了一下,把命名规范了一下,位置和功能重新规划了一下. 源代码下载:http://files.cnblogs.com/xiaoshuai1992/xsFrameWork.SqlServer.zip 请先看图片和介绍 DbOperate文件夹 DbAccess类:核心类,运用Ado.net 对数据库进行操作. DbInParameter :传入DbAccess的参数,如参数,sql语句,sp名称,sp是执行还是返回数据. DbOutParamete

一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER

最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库.读数据表.执行SQL操作,释放数据库等组成,希望对大家有用,由于水平有限,若有错误或者代码不足地方欢迎指正,谢谢. ADOOperate.H [cpp] view plaincopy ////////////////////////////////////////////////////////////////////// // 类功能:用于数据库的操作 主要实现 连接数据库 读数据表 检查数据表 执行SQL语句 //

System V实现的一个消息回射服务器与客户端

echocli.c #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #define ERR_EXIT(m) \ do \ { \ per