前言
上一篇简单的介绍了下Unity客户端和服务器的Socket通信,但是还不能实现多个客户端与服务器的通信,所以今天在这边把前面的工程完善一下(使用的是上篇讲到的UdpClient类来实现),实现多个客户端与服务器的udp通信。效果图如下,两个客户端可以向服务器发送消息,然后服务器每隔3秒给“连接上”的客户端发送收到的消息。
内容
思路上一篇已经讲到过了,我们定义两个特殊的字段,来告知服务器,哪些客户端连接上来了,哪些客户端退出了,如下脚本,该脚本客户端服务器各存一份。
namespace Tool {
class SocketDefine {
public const int port = 8078;//端口号
public const string ip = "127.0.0.1";
public const string udpConnect = "udpConnect";//udp连接
public const string udpDisconnect = "udpDisconnect";//udp断开连接
}
}
服务器端
服务器相比之前要做的就是,当接收到udpConnect信息时要记录下发该消息的客户端ip地址,保存在一个字典中,字典不为空的时候,每隔三秒给字典中存在的客户端发送消息(简单测试,目前服务器给各个客户端发的消息就是客户端发给服务器的最新消息)。当收到udpDisconnect消息时,将该客户端从字典中删除即可。同时我们定义一个新的类ClientMessage,用于存放客户端数据。具体代码如下:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace Tool {
public class ClientMessage {
/// <summary>
/// 每个客户端的唯一id,即ip地址+端口号
/// </summary>
public string clientId;
/// <summary>
/// 客户端地址信息
/// </summary>
public IPEndPoint clientIPEndPoint;
/// <summary>
/// 该客户端发送给服务器的最新消息
/// </summary>
public string recieveMessage;
public ClientMessage(string id, IPEndPoint point, string msg) {
clientId = id;
clientIPEndPoint = new IPEndPoint(point.Address, point.Port);
recieveMessage = msg;
}
}
class UdpManager : SingleClass<UdpM