U_Socket 网络传输
https://www.bilibili.com/video/BV1kC4y1s73t?p=2
https://www.youtube.com/watch?v=TLPhxDeFBGk
1、服务端创建 Socket 设置参数
new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType Tcp);
2、绑定 IP (192.168.xx.xx) 和端口号(0-60000) -> ip地址可以确定主机地址,软件在主机的地址通过端口号确定
-> C# 中 ip 和端口号封装 endPoint(抽象) -> IPEndPoint(实现)
-> 192.168 开头一般是局域网
public class Sample : MonoBehaviour {
[SerializeField] private Text Message;
[SerializeField] private Text IpText;
[SerializeField] private Text PortText;
[SerializeField] private Button ClientBtn;
[SerializeField] private Button ServerBtn;
void Start() {
ClientBtn.onClick.AddListener(ClientNetEvent);
ServerBtn.onClick.AddListener(ServerNetEvent);
}
void ServerNetEvent() {
var ip = IPAddress.Parse(IpText.text);
var port = int.Parse(PortText.text);
var endPoint = new IPEndPoint(ip, port);//绑定 ip 和端口号
var tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tcpServer.Bind(endPoint);//向操作系统申请一个可用的 ip 和端口号,用来做通信
tcpServer.Listen(100);//开始监听,等待客户端开始连接,参数是最大连接数
var clientSocket = tcpServer.Accept();//暂停当前线程,直到有一个客户端连接过来之后进行下面的代码
var message = "欢迎你";
var data = Encoding.UTF8.GetBytes(message);
clientSocket.Send(data);//使用返回的 socket 和客户端做通信
}
void ClientNetEvent() {
var ip = IPAddress.Parse(IpText.text);
var port = int.Parse(PortText.text);
var endPoint = new IPEndPoint(ip, port);
var tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tcpClient.Connect(endPoint);
var data = new byte[1024];
var length = tcpClient.Receive(data);
var message = Encoding.UTF8.GetString(data, 0, length);
Message.text = message;
}
void Update() {
}
}

浙公网安备 33010602011771号