在上篇文章
【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、建一个连接服务器的方法
/// <summary>
/// 连接服务器
/// </summary>
/// <returns></returns>
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、添加一个收数据的方法。该方法在连接服务器的时候就会被新增的线程启动
/// <summary>
/// 收数据。
/// </summary>
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、添加一个向服务器发送消息的方法
/// <summary>
/// 发送文本消息
/// </summary>
/// <param name="msg"></param>
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");
我正在准备创作身份认证,路过的朋友请不吝赐个关注,感激不尽
|