草庐IT

endreceive

全部标签

.net - 我应该什么时候调用 MessageQueue.EndReceive()?

我一直在查看处理来自MSMQ的消息的服务的示例代码。在代码中,在ReceiveCompletedEventHandler的开头立即调用EndReceive()方法,然后它开始实际处理消息的任务。只是我,还是这完全忽略了MSMQ可靠性的要点?EndReceive()难道不应该只在消息被完全处理后才被调用吗? 最佳答案 EndReceive仅表示消息已成功传递-它并不暗示您是否能够使用它做任何有值(value)的事情。听起来您正在考虑从MSMQ进行异步事务读取,在这种情况下,您只会在完全处理您的消息后完成收据(一劳永逸地从队列中删除消息

C# Begin/EndReceive - 如何读取大数据?

当以1024字节的block读取数据时,我如何继续从接收大于1024字节的消息的套接字中读取数据,直到没有数据为止?我是否应该只使用BeginReceive只读取数据包的长度前缀,然后一旦检索到,使用Receive()(在异步线程中)读取数据包的其余部分?还是有别的办法?编辑:我认为JonSkeet的链接有解决方案,但该代码有一点速度障碍。我使用的代码是:publicclassStateObject{publicSocketworkSocket=null;publicconstintBUFFER_SIZE=1024;publicbyte[]buffer=newbyte[BUFFER_S

c# - Begin-EndReceive 看不到到达的数据

我的TCP客户端在接收数据时卡住了。已建立连接客户端发送21个字节。(见#5)客户端上的下一个BeginReceive调用永远不会调用回调。当我强制它调用EndReceive时,它​​永远挂起。IsCompleted=false。一些数据在#5之后到达,但问题是它永远不会到达我的应用程序。TcpClient.Available返回135。客户端可以发送数据,但不从服务器接收任何数据。客户端在Unity3D和Mono2.6中运行。我只能在UnityEditor中首次启动时重现它。第二次它开始正常但随机卡住(也是外部编辑器)。那么,为什么会这样呢?Wiresharklog(设置过滤器tcp

C# 如何手动清除 TCP 套接字缓冲区?

我正在编写一个TCP服务器来打开一个端口并与一些只将字符串数据作为字节数组发送的硬件通信。环境在Unity中,所以我使用异步回调来避免阻塞程序。这似乎工作正常,连接有效,收到正确的数据,我可以向硬件发送消息,但套接字缓冲区永远不会清除。当我执行Socket.EndReceive(ar)时,数据只是堆积起来,不会清空。异步循环是如何工作的?我不明白为什么这段代码没有完成循环并清除缓冲区。我花了很多时间试图理解这个过程,但无法弄清楚为什么这段代码不起作用。protectedTcpListenerListenServer;protectedSocketSimNetSocket;protect

c# - Socket EndReceive 命令/数据问题

背景:我正在编写的应用程序使用异步套接字(使用BeginSend、EndSend、BeginReceive、EndReceive)在彼此之间发送数据。IPV4上的套接字是TCP,没有套接字标志。它使用发送4字节(int)消息的系统,后跟一条消息,其长度在前一条消息中指定。我使用处理MessageLength和MessageBody的函数助手。流程是这样的开始接收()结束接收()MessageLengthReceived()开始接收()MessageBodyReceived()问题:当我以16kb的block发送文件数据时,问题就来了(还有一个额外的小开销:offset、pieceInd

c# - 异步 tcp 服务器内存不断增长,有时也会在 endreceive 上出现 10054 错误

除了内存使用量以惊人的速度增加外,我还在接收端和pgm停止时收到“现有连接已被远程主机10054关闭”。请帮助谢谢我有一个TCP套接字服务器,它工作正常。但工作内存从10MB增长到250MB。我监视了nestat是否有任何closed_wait套接字,但没有找到?谁能帮帮我。它必须处理许多没有内存泄漏的连接。StartListen代码voidStartListen(objectsender,System.EventArgse){try{stringportStr=textBoxPort.Text;intport=System.Convert.ToInt32(portStr);//Cre

c# - Socket.EndReceive 工作流程

关于microsoftsite您可以找到ReadCallback(IAsyncResult)的代码staticvoidReadCallback(IAsyncResultar){StateObjectstate=(StateObject)ar.AsyncState;Sockethandler=state.workSocket;intread=handler.EndReceive(ar);if(read>0){state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,read));handler.BeginReceive(state.b