.NET Framework (current version)
 

结束挂起的异步读取。

命名空间:   System.Net.Sockets
程序集:  System(System.dll 中)

语法

 

复制
public int EndReceive(
IAsyncResult asyncResult
)

参数

asyncResult

IAsyncResult,它存储此异步操作的状态信息以及所有用户定义数据。

返回值

Type: System.Int32

接收到的字节数。

异常

 

Exception Condition
ArgumentNullException

asyncResultnull

ArgumentException

BeginReceive 方法调用未返回 asyncResult

InvalidOperationException

先前曾为异步读取调用过 EndReceive。

SocketException

试图访问套接字时发生错误。有关更多信息,请参见备注部分。

ObjectDisposedException

Socket 已关闭。

备注

 

EndReceive 方法完成在 BeginReceive 方法中启动的异步读取操作。

在调用 BeginReceive 之前,需创建一个实现 AsyncCallback 委托的回调方法。该回调方法在单独的线程中执行并在 BeginReceive 返回后由系统调用。回调方法必须接受 BeginReceive 方法所返回的 IAsyncResult 作为参数。

在回调方法中,调用 IAsyncResultAsyncState 方法以获取传递给 BeginReceive 方法的状态对象。从该状态对象提取接收 Socket。在获取 Socket 之后,可以调用 EndReceive 方法以成功完成读取操作,并返回已读取的字节数。

EndReceive 方法将一直阻止到有数据可用为止。如果您使用的是无连接协议,则 EndReceive 将读取传入网络缓冲区中第一个排队的可用数据报。如果您使用的是面向连接的协议,则 EndReceive 方法将读取所有可用的数据,直到达到 BeginReceive 方法的 size 参数所指定的字节数为止。如果远程主机使用 Shutdown 方法关闭了 Socket 连接,并且所有可用数据均已收到,则 EndReceive 方法将立即完成并返回零字节。

若要获取接收到的数据,请调用 IAsyncResultAsyncState 方法,然后提取所产生的状态对象中包含的缓冲区。

若要取消挂起的 BeginReceive,请调用 Close 方法。

注意

如果收到 SocketException,请使用 SocketException.ErrorCode 属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。

注意

由给定线程启动的所有 I/O 在该线程退出时均被取消。如果线程在操作完成前退出,挂起的异步操作则会失败。

注意

当应用程序中启用了网络跟踪时,此成员将输出跟踪信息。有关详细信息,请参阅 .NET Framework 中的网络跟踪

示例

 

下面的代码示例结束挂起的异步读取。有关演示与套接字异步通信的完整示例,请参见 Socket Code Examples

复制
public static void Read_Callback(IAsyncResult ar){
StateObject so = (StateObject) ar.AsyncState;
Socket s = so.workSocket; int read = s.EndReceive(ar); if (read > 0) {
so.sb.Append(Encoding.ASCII.GetString(so.buffer, 0, read));
s.BeginReceive(so.buffer, 0, StateObject.BUFFER_SIZE, 0,
new AsyncCallback(Async_Send_Receive.Read_Callback), so);
}
else{
if (so.sb.Length > 1) {
//All of the data has been read, so displays it to the console
string strContent;
strContent = so.sb.ToString();
Console.WriteLine(String.Format("Read {0} byte from socket" +
"data = {1} ", strContent.Length, strContent));
}
s.Close();
}
}

Socket.EndReceive 方法 (IAsyncResult)的更多相关文章

  1. Socket.BeginConnect 方法

    Socket.BeginConnect 方法 (IPAddress, Int32, AsyncCallback, Object) 开始一个对远程主机连接的异步请求. 主机由 IPAddress 和端口 ...

  2. python socket 常见方法及 简单服务/客户端

    socket 常见方法: 补充说明:what is file descriptor? 文件描述符是什么? 参考(http://stackoverflow.com/questions/8191905/w ...

  3. ovs-ofctl: s1 is not a bridge or a socket 解决方法

    参考: ovs-vsctl: Error detected while setting up bridge ovs-ofctl: s1 is not a bridge or a socket 解决方法 ...

  4. socket更多方法

    一.socket的更多方法介绍 ###socket更多方法服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客 ...

  5. socket AcceptAsync方法的使用

    AcceptAsync与Accept很大的不一样 Accept是一个同步 阻塞的已经封装好底层的方法 AcceptAsync是一个异步 非阻塞未封装的底层连接入口,需要手动填入连接代码用于优化sock ...

  6. Linux共享库 socket辅助方法

    //sockhelp.h#ifndef _vx #define _vx #ifdef __cplusplus extern "C" { #endif /** * readn - 读 ...

  7. 支持苹果IPV6 ONLY 的socket 修改方法

    首先别错误理解以为app 必须支持 ipv6 的服务端, 只需要支持 ipv6的客户端需要访问 ipv4 的服务端. 目前需要经过  NAT64 转换就能达到目的,客户端只需要支持该转换就能实现, 在 ...

  8. python close()是假象,真正关闭Socket的方法

    背景: 工作中自己用python写了一个tcp工具,然后用while循环一直接收消息,并且打印出来.然后正常close发现设备并没有离线,然后用了临时的规避方案,发现其实是一直阻塞在recv()接收方 ...

  9. 网络编程之socketserver以及socket更多方法

    关于socketserver 关于socket的更多方法 服务端套接字函数: s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始tcp监听 s.accept () 被动接受tc ...

随机推荐

  1. robotframework+python3+selenium之下拉框的选择---第五集

    由于我没有找到option形式的,所以借鉴其他大神的博客内容,如下: 1.F12后看见下拉框的源码是<option xxx> 2.如果F12后看到的下拉源码是这样的: <div xx ...

  2. main中的argc,argv

    那么我们运行程序时,传入的参数,就是这个argc的值:从截图中,我们很清楚的可以看出,argc是传入参数的个数,”传入的参数“加上可执行文件的文件名:  

  3. Spring Cloud (Spring Cloud Stream)解析

    执行脚本目录 /bin windows 在其单独的目录 快速上手 下载并且解压kafka压缩包 运行服务 以Windows为例,首先打开cmd: 1.  启动zookeeper: bin\window ...

  4. 【JZOJ3292】【BZOJ4415】【luoguP3988】发牌

    description 在一些扑克游戏里,如德州扑克,发牌是有讲究的.一般称呼专业的发牌手为荷官.荷官在发牌前,先要销牌(burn card).所谓销牌,就是把当前在牌库顶的那一张牌移动到牌库底,它用 ...

  5. BeautifulSoup 爬虫

    一 安装BeautifulSoup 安装Python的包管理器pip 然后运行 $pip3 install beautifulsoup 在终端里导入它测试下是否安装成功 >>>fro ...

  6. 拦截器一Interceptor

    import org.springframework.web.servlet.HandlerInterceptor; 前言 拦截器,在AOP(Aspect-Oriented Programming)中 ...

  7. 源码安装zabbix-oracle

    源码安装zabbix_agent4.0.3   1.源码包下载地址:https://www.zabbix.com/download_sources 2.下载完后上传在任意目录用root用户创建以下脚本 ...

  8. iOS ARC使用总结

    在iOS ARC模式下,编译器会自动插入release 有些时候程序出现 message sent to deallocated object的时候,你不知道什么原因. 一种原因是因为你在ARC下使用 ...

  9. Python 查看QQ状态

    import requests """ 该程序依赖于QQ的端口程序 返回数据:String,Y = 在线:N = 离线:E = QQ号码错误:A = 商业用户验证失败:V ...

  10. C++的new和delete

    #include <iostream> using namespace std; int main(int argc, char *argv[]) { int *p = NULL; //定 ...