1.socket.BeginConnect();

  其中的三个参数值EndPoint remoteEP,这个是用来指定连接的socket服务器的的地址

socket参数表
EndPoint remoteEP 这个的参数用来指定socket所连接的服务器的地址,一般包含的信息有,IP地址+端口号Point
AsyncCallback callback 这个参数指定一个异步的委托来请求socket服务器,并执行.
objcet state 用来指定异步请求委托的参数
public static void AsynConnect(string json, string ip, int port)
{
try
{
timeoutObject = new ManualResetEvent(false);
sendstr = json;
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(ip), port);
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.BeginConnect(ipe, new AsyncCallback(CallBackMethod), client); if (!timeoutObject.WaitOne(, false))
{
client.Close();
}
}
catch (Exception ex)
{ }
} public static void CallBackMethod(IAsyncResult asyncresult)
{
try
{
client = asyncresult.AsyncState as Socket;
if (client != null)
{
client.EndConnect(asyncresult);
AsynSend(client, sendstr);
AsynRecive(client); }
}
catch (Exception e)
{ }
finally
{
timeoutObject.Set();
}
} public static void AsynSend(Socket socket, string message)
{
if (socket == null || message == string.Empty) return;
//编码
byte[] data = Encoding.UTF8.GetBytes(message);
try
{
socket.BeginSend(data, , data.Length, SocketFlags.None, asyncResult =>
{
int length = socket.EndSend(asyncResult);
// Console.WriteLine(string.Format("客户端发送消息:{0}", message));
}, null);
}
catch (Exception ex)
{ }
} static string receicestr = ""; public static void AsynRecive(Socket socket)
{
byte[] data = new byte[];
try
{ socket.BeginReceive(data, , data.Length, SocketFlags.None,
asyncResult =>
{
int length = socket.EndReceive(asyncResult);
receicestr += Encoding.UTF8.GetString(data);
AsynRecive(socket);
}, null);
}
catch (Exception ex)
{ }
}

按照我的理解是,先创建一个socket连接对象,开启BeginConnect()连接的同时,开启一个新的线程用来走

传入的异步委托,在委托中调用EndConnect(),方法来来让阻塞的线程往下走并同时进行了发送消息和接受

消息两个操作,

第一篇随笔可能语言逻辑和信息不太完整和严谨,如果有错误的地方和不严谨的地方请在下方回复我,我将及时改正

socket的BeginConnect(EndPoint remoteEP,AsyncCallback callback,objcet state);个人理解的更多相关文章

  1. 关于js的callback回调函数的理解

    回调函数的处理逻辑理解:所谓的回调函数处理逻辑,其实就是先将回调函数的代码 冻结(或者理解为闲置),接着将这个回调函数的代码放到回调函数管理器的队列里面. 待回调函数被触发调用的时候,对应的回调函数的 ...

  2. callback回调函数的理解

    callback采用的设计模式是:模板模式,他的设计理念是基于面向对象中的多态的. 我们的程序中走到某个地方他会出现不一样的动作的时候,我们在这儿就使用回调函数.我们利用的就是 多态的原理,我们传递不 ...

  3. Net.Sockets

    #region 程序集 System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Program ...

  4. C# - 网络编程 之 Socket

    命名空间 using System.Net; using System.Net.Socket; Socket类 初始化 public socket (AddressFamily addressFami ...

  5. C#中级-从零打造基于Socket在线升级模块

    一.前言       前段时间一直在折腾基于Socket的产品在线升级模块.之前我曾写过基于.Net Remoting的.基于WCF的在线升级功能,由于并发量较小及当时代码经验的不足一直没有实际应用. ...

  6. [C#]手把手教你打造Socket的TCP通讯连接(一)

    本文章将讲解基于TCP连接的Socket通讯,使用Socket异步功能,并且无粘包现象,通过事件驱动使用. 在编写Socket代码之前,我们得要定义一下Socket的基本功能. 作为一个TCP连接,不 ...

  7. 【Socket】从零打造基于Socket在线升级模块

    一.前言       前段时间一直在折腾基于Socket的产品在线升级模块.之前我曾写过基于.Net Remoting的.基于WCF的在线升级功能,由于并发量较小及当时代码经验的不足一直没有实际应用. ...

  8. C# Socket异步实现消息发送--附带源码

    前言 看了一百遍,不如动手写一遍. Socket这块使用不是特别熟悉,之前实现是公司有对应源码改改能用. 但是不理解实现的过程和步骤,然后最近有时间自己写个demo实现看看,熟悉熟悉Socket. 网 ...

  9. C#网络编程学习(4)---Socket Tcp进阶之 使用异步循环接收客户端连接和信息

    1.方法介绍 BeginAccept(AsyncCallback callback, object state); 异步开始监听客户端连接. callback为一个委托,在成功接收客户端连接时调用委托 ...

随机推荐

  1. 转载 关于启用HTTPS的一些经验分享

    本文转载自  https://imququ.com/post/sth-about-switch-to-https.html 随着国内网络环境的持续恶化,各种篡改和劫持层出不穷,越来越多的网站选择了全站 ...

  2. 各大牛逼讲师的经典Jquery精品视频教程,大放送啦!!!(包括手机移动端JqueryWeb开发)!!!

    各大牛逼讲师的经典Jquery精品视频教程,大放送啦!!!(包括手机移动端JqueryWbd开发)!!! [1]jQuery手机端开发视频教程篇 [10]扬中科JQuery基础教程.zip [15]J ...

  3. hdu1158【DP】

    题意: 第一行项目数: 第二行每个工人的Hire Salary Fire money 第三行每个项目需要的人的数量: 工人在hire/fire的时候要付出额外的钱,如果已经hire了还没有fire就一 ...

  4. windows 自定义批处理BAT/CMD启动Redis等软件

    需求:每次开机都需要启动Redis.QQ.IDEA等等好几个软件,手动点击比较无趣.浪费劳动力,所以通过自定义bat文件,进行批量启动. 唯独启动到Redis时出现问题,下面是在bat里运行的路径: ...

  5. Kera高层API

    目录 Keras != tf.keras Outline1 Metrics Step1.Build a meter Step2.Update data Step3.Get Average data C ...

  6. hibernate错误总结1

  7. mysql 安装和修改编码(utf8mb4)

    安装mysql(linux 我的环境centos 7) 安装MySQL官方的Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-com ...

  8. DISTINCT 去重---SQL

    SQL SELECT DISTINCT 语句 在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值. DISTINCT 关键词用于返回唯一不同的值. SQL SELE ...

  9. HTML表单设计

    一.表单标记 <form>...</form> <form></form>定义表单的开始位置和结束位置,表单提交时的内容就是<form>表单 ...

  10. bio,nio,aio简介

    https://mp.weixin.qq.com/s/F9WwcsFdCOwOeeDc0oc98w——<BIO,NIO,AIO 总结>总结和对比这三种的区别 https://www.jia ...