C# Socket.SendAsync C中的堆栈溢出#
我有一个问题,我的应用程序崩溃似乎是随机的。它的工作时间可能长达30分钟,然后我就崩溃了,如果我调试,我会在行C# Socket.SendAsync C中的堆栈溢出#,c#,sockets,stack-overflow,asyncsocket,sendasync,C#,Sockets,Stack Overflow,Asyncsocket,Sendasync,我有一个问题,我的应用程序崩溃似乎是随机的。它的工作时间可能长达30分钟,然后我就崩溃了,如果我调试,我会在行mySocket.SendAsync(completeArgs)中得到一个错误,这是一个堆栈溢出错误。。。每次我想发送东西时,我都会执行以下代码行,这相当多,可能每0.5秒发送一次。我尝试设置mySocket.NoDelay=true但这并没有解决问题。这是应用程序的客户端 SocketAsyncEventArgs completeArgs = new SocketAsyncEventA
mySocket.SendAsync(completeArgs)
中得到一个错误,这是一个堆栈溢出错误。。。每次我想发送东西时,我都会执行以下代码行,这相当多,可能每0.5秒发送一次。我尝试设置mySocket.NoDelay=true代码>但这并没有解决问题。这是应用程序的客户端
SocketAsyncEventArgs completeArgs = new SocketAsyncEventArgs();
completeArgs.SetBuffer(MsgBuffert, 0, MsgBuffert.Length);
completeArgs.UserToken = this.mySocket;
completeArgs.RemoteEndPoint = this.hostEndPoint;
completeArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnSend);
mySocket.SendAsync(completeArgs);
SocketAsyncEventArgs completeArgs=新的SocketAsyncEventArgs();
completeArgs.SetBuffer(MsgBuffert,0,MsgBuffert.Length);
completeArgs.UserToken=this.mySocket;
completeArgs.RemoteEndPoint=this.hostEndPoint;
completeArgs.Completed+=新事件处理程序(OnSend);
SendAsync(completeArgs);
您的错误可能在其他地方;sendsync
调用正是将堆栈推向边缘的原因。考虑在代码中寻找无界递归的实例,而不是盲目地发送每一个0.5秒,难道你不应该在<代码> OnSend < /C>处理程序中检查它吗?另外,API不支持在同一套接字上并发调用SendAsync
。另外:您是否正在处理SendAsync
的返回值?(你应该这样做;我实际上希望看到如果(!mySocket.SendAsync(completeArgs))在发送(这个,completeArgs);
,在这种情况下,我怀疑我知道会出什么问题,但是:你应该处理返回值……还有:SendAsync
的一部分要点(即它存在的原因)因此,您不需要为每个操作都使用新的SocketAsyncEventArgs
。但是,对于堆栈溢出,最重要的事情可能是:“如何做下一件事”代码工作?你在发送代码结束时调用它吗?堆栈溢出几乎总是关于调用深度,即A调用B调用A调用B调用A调用B调用A调用B调用B等等。我怀疑发送细节完全无关。我想你们是对的,还没有尝试过,但我从send函数调用了send函数…不是想想看,你很聪明:P