繁体   English   中英

使用TCP套接字异步发送/接收固定数量的数据

[英]Asynchronously send / receive fixed amount of data using tcp socket

在我的应用程序中,我通过TCP套接字进行一些异步通信。

我不喜欢这样的事实,即套接字类的发送和接收操作(同步或异步)被允许在请求的字节数传输之前完成。 例如:当我想从套接字读取X字节时,我不想关心要达到此目的实际上需要多少读取操作(在我的应用程序逻辑中)。 我只想在完成时(或发生错误时)得到通知。

拥有BeginSendFixed,EndSendFixed,BeginReceiveFixed和EndReceiveFixed之类的东西会很好。 它们的行为与BeginSend,EndSend,BeginReceive,EndReceive完全相同,但是在传输请求的字节数之前不会调用回调。

我正在考虑自己根据以下条件实施此操作:

http://msdn.microsoft.com/zh-CN/magazine/cc163467.aspx

在DoTaskHelper函数中,我将调用尽可能多(同步)的Send或Receive,直到传输完所有数据为止。

这是要走的路吗?还是有另一种(更好的)方式可以隐藏我的应用程序逻辑中多次发送/接收的需要?

我建议为此使用TaskCompletionSource类。 这样做的好处是,仅在等待I / O时不刻录线程。 首先将现有的(异步)API包装为Task ,然后使用TaskCompletionSource创建您的API可能会更容易。

请注意, TaskCompletionSource已在.NET 4中添加。如果您尚未在该平台上,则建议将完成例程编组到UI线程(可以使用Nito.Async中的基于事件的异步模式套接字包装器轻松完成该例程)。 .Sockets ),然后将其放入特定于您的协议的解析器中( 我的博客上有一个示例)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM