C# Socket 问题,请大家帮忙看一下

wolf_Knight wolf_Knight 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


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的入门捷径。

JITtangming

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

weixin_38645373

C# Socket实现大文件分包传输

C# Socket实现大文件的分包上传。基本原理:添加客户端缓存,计算上传文件的字节,计算包的数量 ,计算最后一个包的字节。

养 家 糊 口

C# 稳定的Socket组件

C# 稳定的Socket组件,不用去考虑怎么处理各种异常,拿来直接用就可以了

lclc88com
评论 19
收藏 已收藏
分享
返回顶部
wolf_Knight
C# 111,129 成员 642,538 内容