# EasyTCP **Repository Path**: welcome2jcSpace/easy-tcp ## Basic Information - **Project Name**: EasyTCP - **Description**: 早期基于TCP封装的库 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-09 - **Last Updated**: 2022-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EasyTCP 请生成DLL 后使用 #### 介绍 EasyTCP 分两个模块 EasyServer 和 EasyClient 分别对应这 服务器 和 客户端 #网络聊天室案例 ![](IMGS/chatRoomLogin.png) ![](IMGS/chatRoomScene.png) #### EasyServer //新客户端连接时回调 EasyServer.onClientLinkCallback //有客户端断开连接时回调 EasyServer.onClientLogoutCallback //客户端掉线回调 EasyServer.onClientLostConnectionCallback //启动服务器 前面的是IP, 后面的是端口 EasyServer.Start("127.0.0.1",8080) //启动服务器 前面是指定客户端的Socket, 后面是字符串格式 也可以用Json字符串 EasyServer.Send(Socket,string data) **** 以下内容 一般情况下 不需要做任何修改 //设置编码格式 默认utf-8 EasyServer.bufferEncoder = Encoding.UTF8; //获取底层服务器Socket 自定义操作 比如 修改protobuf协议 等 EasyServer.shareSocketInstance; **** 案例 EasyServer.bufferEncoder = Encoding.UTF8; EasyServer.onClientLinkCallback += onClientLink; EasyServer.onClientLogoutCallback += onClientLogout; EasyServer.onClientLostConnectionCallback += onClientLostConnection; EasyServer.onDataReceivedCallback += onDataReceived; //当客户端连接成功 void onClientLink( Socket newClient ) { var ID = newClient.RemoteEndPoint.ToString( ); Console.WriteLine( $"The new client connected successfully: {ID}" ); } //客户端退出房间 void onClientLogout( Socket client ) { var ID = client.RemoteEndPoint.ToString( ); if ( clients.ContainsKey( ID ) ) { var msg = new MsgData( ); msg.type = MsgType.Logout; msg.caller = ID; msg.data = JsonConvert.SerializeObject( users[ID] ); clients.Remove( ID ); users.Remove( ID ); BroadcastMessage( msg ); } Console.WriteLine( $"User exits the room: {ID}" ); } //客户端掉线 void onClientLostConnection( Socket client ) { var ID = client.RemoteEndPoint.ToString( ); var msg = new MsgData( ); msg.type = MsgType.LostConnection; msg.caller = ID; BroadcastMessage( msg ); Console.WriteLine( $"User lost connection: {ID}" ); } //客户端掉线重连 void onClientLostReconnect( Socket client ) { var ID = client.RemoteEndPoint.ToString( ); var msg = new MsgData( ); msg.type = MsgType.LostReconnect; msg.caller = ID; BroadcastMessage( msg ); Console.WriteLine( $"User lost reconnection: {ID}" ); } //接收到客户端的数据 bool onDataReceived( Socket target, string msgBuffer ) { var msg = JsonConvert.DeserializeObject( msgBuffer ); #if DEBUG Console.WriteLine( $"Received data type: {msg.type.ToString( )}" ); #endif switch ( msg.type ) { case MsgType.Register: onClientRegister( target, msg ); break; case MsgType.Login: onClientLogin( target, msg ); break; case MsgType.Logout: onClientLogout( target ); return false; case MsgType.Chat: onClient2Client( target, msg ); break; default: break; } return true; } #### EasyClient //当有接收到新的数据时调用 public static Action onDataReceivedCallback; //当连接服务器成功时调用 public static Action onConnectServerSucceed; //当连接服务器失败时调用 public static Action onConnectServerFaild; //启动客户端 ip格式案例: 127.0.0.1:5566 public static void Launch( string ip ) //向服务器发送消息 public static void Send(string data ) **** 以下内容 一般情况下 不需要做任何修改 //设置编码格式 默认utf-8 EasyClient.bufferEncoder = Encoding.UTF8; //获取底层客户端Socket 自定义操作 比如 修改protobuf协议 等 EasyClient.shareSocketInstance; **** 多人聊天室 案例 https://gitee.com/welcome2jcSpace/chat-room