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(),方法来来让阻塞的线程往下走并同时进行了发送消息和接受

消息两个操作,

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

最新文章

  1. 探索c#之递归APS和CPS
  2. JS实现图片预加载无需等待
  3. 人人都应该学习Markdown
  4. 端口扫描之王——nmap入门精讲(二)
  5. (copy) Linux Commands Cheat Sheet in Black & White
  6. Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana 分块
  7. Unique Binary Search Tree
  8. 10、end关键字和Fibonacci series: 斐波纳契数列
  9. 《java入门第一季》之面向对象(重头戏多态)
  10. C++项目中的extern "C" {}(转)
  11. 执行shell脚本出错'\r': command not found
  12. 微信小程序实现显示和隐藏控件-头像-取值-bindblur事件
  13. 转://Oracle 11gR2 硬件导致重新添加节点
  14. java线程池实现原理
  15. hdu 3374 String Problem(kmp+最小表示法)
  16. mycat 分库分表
  17. scp命令在linux间传送文件的方法
  18. java EE :GenericServlet 抽象类、ServletConfig 接口
  19. WebService发布协议--SOAP和REST的区别
  20. 理解JavaScript执行环境与作用域

热门文章

  1. 洛谷 - P1582 - 倒水 - 位运算
  2. HDU2824【欧拉函数性质】
  3. Codeforces482B【线段树构造】
  4. opengl VAO ,VBO
  5. [Xcode 实际操作]七、文件与数据-(18)使用MarkMan与设计师进行心灵沟通
  6. Django框架知识2
  7. [Swift]快速反向平方根 | Fast inverse square root
  8. [Usaco2011 Dec]Grass Planting
  9. js监听键盘提交表单
  10. 线程安全 原子性 可见性 顺序性 volatile