.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. Hadoop–Task 相关

    在MapReduce计算框架中,一个应用程序被划分为Map和Reduce两个计算阶段.他们分别由一个或多个Map Task 和Reduce Task组成. Map Task: 处理输入数据集合中的一片 ...

  2. UartAssist串口调试工具

    第一步安装UartAssist 第二步打开UartAssist 界面为 我们将我们的wifi模块连接电脑, 查看的端口号通过计算机管理设备管理器进行查看 根据要求发送数据 就可以了

  3. 利用VUE-CLI脚手架搭建VUE项目

    前言 在学习完vue基础语法之后,学着利用vue-cli脚手架搭建一个项目,本篇随笔主要记录搭建的过程,供大家一起学习. 具体内容 搭建vue项目的准备工作 1.安装Nodejs.NPM以及VSCod ...

  4. 26.String类(1)

    1. 下面是一个使用equals的例子: 我查看了一下源代码,string类中equals方法的源代码如下: public boolean equals(Object anObject) { if ( ...

  5. JavaScript: 变量提升和函数提升

    第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...

  6. 【Python】模拟登录上海西南某高校校园网 (jaccount)

    好久没写东西了,最近学习了一下模拟登录,以校园网为例,作一记录. 去年的时候写过一篇模拟登录的文章,用的是登录后的cookies,这种操作比较傻瓜,也不智能,不够自动化,本质还是手动登录. 这次我尝试 ...

  7. C# sort System.InvalidOperationException: Failed to compare two elements in the ar

    System.InvalidOperationException: Failed to compare two elements in the array. ---> System.NullRe ...

  8. Codeforces 166B - Polygon (判断凸包位置关系)

    Codeforces Round #113 (Div. 2) 题目链接:Polygons You've got another geometrical task. You are given two ...

  9. 剑指offer——34之字打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推.   题解: 与上道题没区别,就是在存入数据时 ...

  10. Python print命令/ 解压序列

    Python 命令参数  print 命令 : #默认的print是有个 空格,和换行的 # print(sep= ' ') # print(end = '/n') a = 'sunjinchao' ...