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() {
    }
}
posted @ 2022-04-04 14:23  匿鱼  阅读(52)  评论(0)    收藏  举报