C# Socket 问题,请大家帮忙看一下
private IPEndPoint localEndPoint;
private Socket mySocket;
private bool B_receive_Frm= fase;
public Thread LstThReceive = null;
//启动接收
protected void StartTcpRec()
{
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
localEndPoint = new IPEndPoint(ipAddress, 5000);
mySocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
mySocket.Bind(localEndPoint);
try
{
LstThReceive = new Thread(new ThreadStart(Listerner));
LstThReceive.IsBackground = true;
B_receive_Frm = true;
LstThReceive.Start();
}
catch (Exception e)
{
throw new Exception(" Start SOCKET:" + e.Message);
}
}
/// <summary>
/// 监听数据
/// </summary>
protected void Listerner()
{
try
{
mySocket.Listen(100);
while (B_receive_Frm == true)
{
// Set the event to nonsignaled state.
allDone.Reset();
// Start an asynchronous socket to listen for connections.
// Console.WriteLine("Waiting for a connection...");
mySocket.BeginAccept(
new AsyncCallback(AcceptCallback),
mySocket);
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
}
catch (System.ObjectDisposedException e)
{
throw new Exception("SOCKET OBJECT : " + e.Message);
}
catch (Exception ex)
{
throw new Exception(" SOCKET Listerner: " + ex.Message);
}
}
/// <summary>
/// 异步接受数据
/// </summary>
/// <param name="ar"></param>
protected void AcceptCallback(IAsyncResult ar)
{
// Signal the main thread to continue.
allDone.Set();
//下面就是异步处理的一些代码就不贴了.
}
首先请大家看一下代码对不,想用线程实现socket异步通信功能!
在主界面调用 StartTcpRec 方法后,主界面还有其他线程在处理另外的工作.
单机测试,就是说长时间不给socket发送信息(比如:2-3小时或者更长时间)
发现出现如下问题:
Message:[ObjectDisposedException]
stackTrace:
at system.threading.waitHandle.checkResultInternal(boolean r)
at system.threading.eventwaithandle.set()
at system.windows.forms.control.task.markdone()
at system.windows.forms.control.task.invoke()
at system.windows.forms.control._invokeall()
at system.windows.forms.control.wnproc(WM wm,int32 wparam,int32 Iparam)
at system.windows.forms.containercontrol.wnproc(WM wm,int32 wparam,int32 iparam)
at system.windows.forms.control._internalwnproc(wm wm,int32 wparam,int32 iparam)
at miscrosoft.agl.forms.evl.entermainloop(intptr hwnmain)
at system.windows.forms.all.........
在百度后,有网友说可能是 " allDone.WaitOne(); " 长时间等待会出现这个问题.
请问大虾们有没有遇到这种情况,或者我的代码写的有问题?
有朋友说可以采用 alldone.waitone(new TimeSpan(0,30,0),true) 这样来处理,不知道这样是否可行?或者还有更好的处理方法?谢谢大家了!
...全文
相关推荐
c#网络编程 socket源代码
c#网络编程源代码 学习网络编程socket的入门捷径。
C# Socket/TCP 及Socket编程
Socket相关的内容 什么是Socket 在计算机通信领域,Socket被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过Socket这种约定,一台计算机可以接收到其他计算机的数据,也可以向其他计算机发送数据。 Socket的本质 Socket的本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这个就是Scoket编程接...
java Socket与C#通信中中文乱码问题的解决方案
近正在做一个项目,其中遇到了一个问题是java与.NET之间的通信问题。具体的问题是这样的: 客户端使用java,服务器端使用的是C#。两者之间使用基于TCP的Socket通信方式。可是,做了一个测试小例子,结果从客户端传过来的都是乱码。于是上网查,希望可以找到解决方法,可是,网上有好多的答案,经过了很多的实验,都不能很好的解决。没办法只能靠自己一点一点的排查了。 经过一番努力,终找到了原因:C#和java的编码方式不同。虽然找到了原因,但是网上关于这个问题的答案也是百家争鸣,在这里给出源代码,希望对大家有帮助。 首先是客户端的java代码(这是比较简单的部分) im
C# Socket实现大文件分包传输
C# Socket实现大文件的分包上传。基本原理:添加客户端缓存,计算上传文件的字节,计算包的数量 ,计算最后一个包的字节。
C# 稳定的Socket组件
C# 稳定的Socket组件,不用去考虑怎么处理各种异常,拿来直接用就可以了


