Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Socket.SendAsync C中的堆栈溢出#_C#_Sockets_Stack Overflow_Asyncsocket_Sendasync - Fatal编程技术网

C# Socket.SendAsync C中的堆栈溢出#

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

我有一个问题,我的应用程序崩溃似乎是随机的。它的工作时间可能长达30分钟,然后我就崩溃了,如果我调试,我会在行
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