c# socket 客户端异步实现
来源:互联网 发布:微时代网络 编辑:程序博客网 时间:2024/05/18 04:31
简易封装:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net;using System.Net.Sockets;namespace dclient{ public delegate void DelegateMsg(object msg); public class Client { private static Socket _clientSocket; private static string _server; private static int _port; public static DelegateMsg OnConnect; public static DelegateMsg OnSend; public static DelegateMsg OnReceive; public static DelegateMsg OnServerDown; public static DelegateMsg OnErr; public static void Connect() { try { _server = System.Configuration.ConfigurationManager.AppSettings["serverIp"]; _port = int.Parse(System.Configuration.ConfigurationManager.AppSettings["serverPort"]); IPEndPoint ip = new IPEndPoint(IPAddress.Parse(_server), _port); _clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _clientSocket.BeginConnect(ip, new AsyncCallback(ConnectCallBack), _clientSocket); } catch (Exception e) { throw e; } } private static void ConnectCallBack(IAsyncResult iar) { Socket client = (Socket)iar.AsyncState; try { client.EndConnect(iar); OnConnect("已连接"); } catch (SocketException e) { if (e.ErrorCode == 10061) { OnErr("服务器程序未运行或服务器端口未开放"); } else { OnErr(e.Message); } } finally { } } public static void Send(string msg) { if (_clientSocket == null || msg == string.Empty) return; msg += "\r\n"; byte[] data = Encoding.UTF8.GetBytes(msg); try { _clientSocket.BeginSend(data, 0, data.Length, SocketFlags.None, asyncResult => { int length = _clientSocket.EndSend(asyncResult); OnSend(string.Format("客户端发送消息:{0}", msg)); }, null); } catch (Exception e) { OnErr(e.Message); } } public static void Recive() { byte[] data = new byte[1024]; try { _clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, asyncResult => { try { int length = _clientSocket.EndReceive(asyncResult); OnReceive(string.Format("收到服务器消息:长度:{1},{0}", Encoding.UTF8.GetString(data), length)); Recive(); } catch (SocketException e) { if (e.ErrorCode == 10054) { OnServerDown("服务器已断线"); } else { OnErr(e.Message); } } }, null); } catch (Exception ex) { OnErr(ex.Message); } } }}
使用:
public partial class Form1 : Form { public Form1() { InitializeComponent(); Client.OnConnect += new DelegateMsg(connect); Client.OnSend += new DelegateMsg(send); Client.OnReceive += new DelegateMsg(receive); Client.OnServerDown += new DelegateMsg(svrdown); Client.OnErr += new DelegateMsg(onerr); } private void Form1_Load(object sender, EventArgs e) { Client.Connect(); } private void connect(object msg) { System.Diagnostics.Debug.WriteLine(msg.ToString()); Client.Send("DALO 发送测试"); Client.Recive(); } private void send(object msg) { System.Diagnostics.Debug.WriteLine(msg.ToString()); } private void receive(object msg) { System.Diagnostics.Debug.WriteLine(msg.ToString()); } private void svrdown(object msg) { System.Diagnostics.Debug.WriteLine(msg.ToString()); } private void onerr(object msg) { System.Diagnostics.Debug.WriteLine(msg.ToString()); } }
未实现的几个常用操作:
1、接收服务器发送的大数据量的合包。
2、服务器断线后客户端自动检测并重连,需先将_clientSocket释放。
3、心跳包。
阅读全文
0 0
- c# socket 客户端异步实现
- c# Socket 异步客户端服务端
- C# socket编程 异步服务端 同步客户端
- C# socket异步通信实现
- C#基于Socket客户端实现
- 基于C#的socket编程的TCP异步实现 ,包含服务器端与客户端源代码
- C#异步传输字符串客户端的实现
- C# Socket异步通讯实现详解
- C# Socket异步通讯客实现源码
- C# Socket异步通讯实现详解
- c#异步Socket Tcp服务器实现
- C# socket编程 异步服务端 同步客户端(转)
- C# 异步TCP Socket聊天室(1服务器,N客户端)
- C# 异步TCP Socket聊天室(1服务器,N客户端)
- C# Socket异步通讯客户端之发送数据
- C# Socket编程 服务端与客户端(四) 异步服务端
- .net中的socket异步通信实现--客户端代码
- 采用异步socket实现客户端和服务端的通信
- JSP——Java Server Pages(java服务器页面)
- 奥威Power-BI For 生产制造BI方案-车间单位产量用工
- Mongo实战-分片集群的查询与索引
- Unity3d--让我们的小坦克动起来
- 2017-09-12 LeetCode_026 Remove Duplicates from Sorted Array
- c# socket 客户端异步实现
- hdu 1022 Train Problem I(栈的操作);
- 聊微服务:先做好你的服务拆分
- 反射获取类属性和方法的调用
- 解决中文参数出现的乱码问题
- 关于java.math.BigInteger cannot be cast to java.lang.Integer小方法
- JSP的标签文件
- .html(),.text()和.val()
- itext7学习笔记——第4章