在上篇文章
【C#】一文教你搭个简易的Socket服务器
中,已经给大家介绍如何搭建一个简易的Socket服务器。本篇则会给大家再介绍下怎么实现一个Socket客户端。这个Socket客户端也能够应用在Unity中。做游戏的朋友可以参考下。
总的思路和过程如下:
1、新建Socket对象,与服务端不同,这里要指定连接的服务端IP和端口
2、新建个线程,专门用于监听服务器下发的数据
3、添加一个方法用于实现向服务器发送数据
具体实现过程如下:
1、建一个SocketClient类,并设置服务端ip和端口
public class SocketClient
{
//客户端socket
private Socket clientSocket;
//服务器IP和端口
public string ServerIP;
public int ServerPort;
//收消息的线程
private Thread acceptMsgThread;
//构造函数
public SocketClient(string _serverIP, int _serverPort)
{
ServerIP = _serverIP;
ServerPort = _serverPort;
}
}
2、建一个连接服务器的方法
////// 连接服务器 /// ///public bool ConnectServer() { if (ServerIP == null || ServerPort == 0) { return false; } try { //初始化socket对象 clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //初始化地址和端口号 IPAddress serverIp = IPAddress.Parse(ServerIP); IPEndPoint endPoint = new IPEndPoint(serverIp, ServerPort); //连接服务器 clientSocket.Connect(endPoint); //新建线程,接受服务端下发的消息 acceptMsgThread = new Thread(AcceptMsgs); acceptMsgThread.IsBackground = true; acceptMsgThread.Start(); return true; } catch(Exception e) { return false; } }
3、添加一个收数据的方法。该方法在连接服务器的时候就会被新增的线程启动
////// 收数据。 /// private void AcceptMsgs() { try { while(true) { byte[] buffer = new byte[MAX_SEND_FILE_LENGTH]; int dataLength = clientSocket.Receive(buffer); if(dataLength == 0) { //长度为0表示没接受到内容。断开。 break; } string strMsg = Encoding.UTF8.GetString(buffer, 0, dataLength); Console.WriteLine("客户端接受到消息:" + strMsg); } } catch(Exception e) { } }
4、添加一个向服务器发送消息的方法
////// 发送文本消息 /// /// public bool SubmitMsgToServer(string msg) { if(clientSocket == null || !clientSocket.Connected) { return false; } try { byte[] buffer = Encoding.UTF8.GetBytes(msg); //发送给服务端 clientSocket.Send(buffer); return true; } catch(Exception e) { Console.WriteLine("客户端发送数据发生异常:" + e.ToString()); return false; } }
5、就这样客户端搭建完毕。调用方法:
SocketClient client = new SocketClient("127.0.0.1","5001");
client.ConnectServer();
client.SubmitMsgToServer("hello this is socket client");
我正在准备创作身份认证,路过的朋友请不吝赐个关注,感激不尽


