jjzjj

ReceiveAsync

全部标签

c# - Websocket 的 ReceiveAsync 方法不等待整个消息

我正在通过websocket接收JSON。至少:我是部分的。使用在线websocket服务,我收到完整的JSON响应(所有HTML标记都被忽略)。当我查看在控制台中收到的JSON时,我可以看到HTML标记(在调试期间使用HTML查看器查看它会删除HTML)但它突然结束(数据不完整)。我的缓冲区有足够的空间,我正在使用async-await来(据说)等待整个响应进入,然后再继续。privateasyncTaskReceive(){varbuffer=newbyte[4096*20];while(_socket.State==WebSocketState.Open){varresponse

c# - 将 Socket.ReceiveAsync 替换为 NetworkStream.ReadAsync(可等待)

我有一个应用程序可以同时建立几百个TCP连接,并从它们接收源源不断的数据流。privatevoidstartReceive(){SocketAsyncEventArgse=newSocketAsyncEventArgs();e.Completed+=receiveCompleted;e.SetBuffer(newbyte[1024],0,1024);if(!Socket.ReceiveAsync(e)){receiveCompleted(this,e);}}voidreceiveCompleted(objectsender,SocketAsyncEventArgse){ProcessD

c# - 明显的 BufferBlock.Post/Receive/ReceiveAsync race/bug

交叉发布到http://social.msdn.microsoft.com/Forums/en-US/tpldataflow/thread/89b3f71d-3777-4fad-9c11-50d8dc81a4a9我知道...我并没有真正发挥TplDataflow的最大潜力。ATM我只是使用BufferBlock作为消息传递的安全队列,其中生产者和消费者以不同的速率运行。我看到一些奇怪的行为,让我不知所措继续。privateBufferBlockmessageQueue=newBufferBlock();publicvoidSend(objectmessage){varaccepted=

c# - SocketAsyncEventArgs ReceiveAsync 限制(未调用 arg.Complete)

我们有一个非常标准的SocketAsyncEventArgs的TCP实现(与您可以google的众多示例没有真正的区别)。我们有一个负载测试控制台应用程序(也使用SocketAsyncEventArgs),每秒发送x条消息。我们使用线程自旋在1000毫秒内引入最准确的间隔来发送消息(而不是尽可能快地发送x条消息,然后等待剩余的1000毫秒过去)。我们发送的消息大小大约为2k,服务器实现(在同一个套接字上)使用预先分配的HTTPOK200响应对其进行响应。我们希望能够使用SocketAsyncEventArgs每秒发送100条消息,如果不是1000条消息的话。我们发现通过简单的阻塞Tcp

c# - TCP 服务器在 SocketAsyncEventArgs 实例上重置 AcceptSocket.ReceiveAsync 操作

我目前有一个使用C#SAEA实现的TCP服务器。我想做的是在连接到服务器的2个TCP客户端(客户端1和客户端2)之间转发一条消息。服务器使用receiveSendEventArgs.AcceptSocket.ReceiveAsync和receiveSendEventArgs.AcceptSocket.SendAsync命令发送和从每个连接的客户端接收信息,无需问题。服务器在客户端1和客户端2的receiveSendEventArgs.AcceptSocket.ReceiveAsync操作中。客户端1发送一条消息,服务器接受该消息。服务器看到Client2也已连接,因此需要获取recei

c# - Socket ReceiveAsync 合并数据包

我打算通过套接字接收数据包,但由于它们是从发送方以高频率发送的,所以它们中的许多被打包到一个byte数组中。SocketAsyncEventArgs.Buffer然后保存多个数据包,即使它们是单独发送的(使用wireshark验证)。我已经尝试对传入的数据包进行排队并异步处理它们,但我仍然得到相同的结果。这种行为的原因可能是什么? 最佳答案 这就是TCP的工作原理。TCP连接是一个双向字节流,您必须这样对待它。来自一端的单次发送可能会导致接收方的多次读取,反之亦然,多次发送可能会以单次读取结束,并且传输不会保留应用程序消息边界。你必

c# - ReceiveAsync 与 BeginReceive 的性能

我目前正在编写一个客户端应用程序,我想知道我是否应该使用Socket类的ReceiveAsync或BeginReceive方法。到目前为止,我一直在使用后者,但是,我发现它似乎对CPU造成了很大的压力。这是我的接收循环的基本样子:privatevoidsocket_ReceiveCallback(IAsyncResultresult_){//doesnothingelseatthemomentsocket.EndReceive(result_);byte[]buffer=(byte[])result_.AsyncState;//receivenewpacketbyte[]newBuff