C# Socket异步通讯是如何实现的呢

来源:互联网 发布:洋气的英文淘宝店铺名 编辑:程序博客网 时间:2024/06/05 11:14

    C# Socket异步通讯是如何实现的呢?C# Socket异步通讯客户端设计的思路是什么呢?那么本文就向你介绍具体的内容。

     

    C# Socket异步通讯客户端实现源码

    C# Socket异步通讯客户端之主程序:

    1. public static int Main(String[] args)  
    2. {  
    3.  
    4. IPAddress ipAddress = IPAddress.Parse("192.168.1.104");  
    5. int port = 20000;  
    6. IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);  
    7.  
    8. // 生成一个TCP/IP socket.  
    9. Socket client = new Socket(AddressFamily.InterNetwork,  
    10. SocketType.Stream, ProtocolType.Tcp);  
    11.  
    12. // 与目标终端连接.  
    13. client.BeginConnect(remoteEP,  
    14. new AsyncCallback(ConnectCallback), client);  
    15. //等待,直到连接程序完成。在ConnectCallback中适当位置有connecDone.Set()语句  
    16. connectDone.WaitOne();  
    17.  
    18. // 发送数据到远程终端.  
    19. Send(client, "This is a test<EOF>");  
    20. sendDone.WaitOne();  
    21.  
    22. // 接收返回数据.  
    23. Receive(client);  
    24. receiveDone.WaitOne();  
    25.  
    26. // Write the response to the console.  
    27. Console.WriteLine("Response received : {0}", response);  
    28.  
    29. // Release the socket.  
    30. client.Shutdown(SocketShutdown.Both);  
    31. client.Close();  
    32.  
    33. return 0;  
    34.  

    C# Socket异步通讯客户端之连接部分Callback:

    1. private static void ConnectCallback(IAsyncResult ar)  
    2. {  
    3.  
    4. // 从state对象获取socket.  
    5. Socket client = (Socket)ar.AsyncState;  
    6.  
    7. // 完成连接.  
    8. client.EndConnect(ar);  
    9.  
    10. Console.WriteLine("Socket connected to {0}",  
    11. client.RemoteEndPoint.ToString());  
    12.  
    13. // 连接已完成,主线程继续.  
    14. connectDone.Set();  

    C# Socket异步通讯客户端之数据接收:

    1.    private static void Receive(Socket client)  
    2. {  
    3.  
    4. // 构造容器state.  
    5. StateObject state = new StateObject();  
    6. state.workSocket = client;  
    7.  
    8. // 从远程目标接收数据.  
    9. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,  
    10. new AsyncCallback(ReceiveCallback), state);  
    11.     
    12. }  
    13.  
    14. private static void ReceiveCallback(IAsyncResult ar)  
    15. {  
    16.  
    17. // 从输入参数异步state对象中获取state和socket对象  
    18. StateObject state = (StateObject)ar.AsyncState;  
    19. Socket client = state.workSocket;  
    20.  
    21. //从远程设备读取数据  
    22. int bytesRead = client.EndReceive(ar);  
    23.  
    24. if (bytesRead > 0)  
    25. {  
    26. // 有数据,存储.  
    27. state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));  
    28.  
    29. // 继续读取.  
    30. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,  
    31. new AsyncCallback(ReceiveCallback), state);  
    32. }  
    33. else 
    34. {  
    35. // 所有数据读取完毕.  
    36. if (state.sb.Length > 1)  
    37. {  
    38. response = state.sb.ToString();  
    39. }  
    40. // 所有数据读取完毕的指示信号.  
    41. receiveDone.Set();  
    42. }  
    43.  

    C# Socket异步通讯客户端之发送数据:

    1. private static void Send(Socket client, String data)  
    2. {  
    3. // 格式转换.  
    4. byte[] byteData = Encoding.ASCII.GetBytes(data);  
    5.  
    6. // 开始发送数据到远程设备.  
    7. client.BeginSend(byteData, 0, byteData.Length, 0,  
    8. new AsyncCallback(SendCallback), client);  
    9. }  
    10.  
    11. private static void SendCallback(IAsyncResult ar)  
    12. {  
    13.  
    14. // 从state对象中获取socket  
    15. Socket client = (Socket)ar.AsyncState;  
    16.  
    17. // 完成数据发送.  
    18. int bytesSent = client.EndSend(ar);  
    19. Console.WriteLine("Sent {0} bytes to server.", bytesSent);  
    20.  
    21. // 指示数据已经发送完成,主线程继续.  
    22. sendDone.Set();  
    23.  

    C# Socket异步通讯客户端的实现源码内容就基本向你介绍到这里,希望对你了解和学习C# Socket异步通讯有所帮助。

    【编辑推荐】

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 赌博输了钱后悔怎么办 借赌博输了80万怎么办 赌博输了50万怎么办 手机赌博输了钱怎么办 内存卡是扩容卡怎么办 坐了过山车想吐怎么办 坐完摇椅想吐怎么办 玩完过山车想吐怎么办 做了过山车想吐怎么办 坐车后恶心想吐怎么办 太胖了想减肥怎么办 被集资诈骗的人怎么办 教了作业没写怎么办 移动4g网速慢怎么办 小孩装病不去上学怎么办 卖衣服顾客嫌贵怎么办 当顾客说再看看怎么办 读完高中没考上大学怎么办 手抖不会写字了怎么办 字认识写不出来怎么办 八四把衣服发黄怎么办 孩孑在学校被打怎么办 在学校有人打我怎么办 孩子在学校不爱说话怎么办 孩子上幼儿园不和小朋友玩怎么办 遇到有人要打你怎么办 被表白了怎么办神回复 学校要发展我该怎么办 如果有人要打你怎么办 梦见有人要杀我怎么办 如果有人要杀我怎么办 梦到有人要杀我怎么办 感觉有人要杀我怎么办 我很自卑 没自信怎么办 如果在学校被打怎么办 如果有人打我该怎么办 别人要砍我我怎么办 专四两次没过怎么办 3岁宝宝害羞胆小怎么办 人太老实被欺负怎么办 在外面被欺负了怎么办