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. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历

    二叉树的先序,中序,后序如何遍历,不在此多说了.直接看题目描述吧(题目摘自九度oj剑指offer面试题6): 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结 ...

  2. [ACM] hdu 1285 确定比赛名次 (拓扑排序)

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  3. std::thread 在DLLMain 中会发生死锁 std::thread cause deadlock in DLLMain

    注意不要再DLLMain中使用 std::thread 否则会发生死锁. 但是可以使用 _beginthreadex (此函数可以使用lambda) 或者直接使用windows的底层函数: Creat ...

  4. 洛谷CF895C Square Subsets(线性基)

    洛谷传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 题意: 给你n个数,每个数<=70,问有多少个集合,满足集合中所有数相乘是个完全平方数(空集除外) 题解: 完全看不出这玩意儿和线性基有什 ...

  5. Tcl/Tk语言学习------拆分字符串

    字符串的拆分 前言 字符串的处理是每种语言经常会遇到的问题,tcl作为一门脚本语言自然也不例外,关于字符串的拆分,一般会有两种情况:1.使用单个字符拆分,2.使用字符串拆分. 1.使用单个字符拆分字符 ...

  6. 考虑实现Comparable接口

    考虑实现Comparable接口   compareTo方法没有在Object中声明.相反,它是Comparable接口中唯一的方法.compareTo方法不但允许进行简单的等同性比较,而且允许执行顺 ...

  7. python自建模块显示说明与详情

    通常我们自建模块放在/usr/lib/python2.7/site-packages下面,这样可以python就可以进行调用. 但是,自建模块也要有详细的说明情况,例如查help,可以看出来模块的作用 ...

  8. 升级ruby的版本

    升级ruby版本,有时候安装ruby的版本过低,需要进行升级,例如安装在centos6.7安装fpm需要ruby版本在1.9以上. 1.主机环境如下: [root@test ~]# cat /etc/ ...

  9. 黑马方法引用学习 Stream流 函数式接口 Lambda表达式 方法引用

  10. MySQL习题1 一对多实例 产品和分类

    /* 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- ----------------- ...