这本书买了蛮久的,趁着寒假的时间拿出来学习一下,争取这个假期把这本书看完,把里面的实例代码都自己敲一遍,加深理解。
这是一个长期更新的系列:全书共十二章就算是每个章节写一篇文章也至少要写十二篇文章,希望自己可以坚持着书看完,把博客写完。

Socket连接步骤

示例图

type="text/javascript">document.write("graph TD;\n    Client-->|连接服务器|Connect;\n    Connect-->|发送消息|Send;\n    Connect-->|三次握手|Accept;\n    Send-->|接收服务器消息|Receive;\n    Send-->|向服务器发送数据|ServerReceive;\n    Receive-->|断开连接|Close;\n    Close-->|四次挥手|ServerClose;\n    Server-->|绑定Ip和端口|Bind;\n    Bind-->|开启监听|Listen;\n    Listen-->|接收客户端连接请求|Accept;\n    Accept-->|接收客户端数据|ServerReceive;\n    ServerReceive-->|给客户端发送数据|ServerSend;\n    ServerSend-->|发送数据给客户端|Receive;\n    ServerSend-->|断开连接|ServerClose;\n");

Echo

第一章主要讲解了网络的连接方式,在例子中初步实现了一个使用 Socket 的 TCP 通信的客户端和服务端案例。
客户端代码如下:

using System.Net.Sockets;
using UnityEngine;
using UnityEngine.UI;
public class Echo : MonoBehaviour
{
    public Button linkBtn;
    public Button sendBtn;
    public InputField inputField;
    public Text infoText;
    private Socket _socket;
    
    private void Start()
    {
        linkBtn.onClick.AddListener(Connection);
        sendBtn.onClick.AddListener(SendMessage);
    }
    
    /// <summary>
    /// 连接
    /// </summary>
    void Connection()
    {
        _socket=new Socket(SocketType.Stream,ProtocolType.Tcp);
        _socket.Connect("127.0.0.1",8888);
    }
    /// <summary>
    /// 发送消息
    /// </summary>
    void SendMessage()
    {
        var sendStr = inputField.text;
        var sendBytes = System.Text.Encoding.Default.GetBytes(sendStr);
        _socket.Send(sendBytes);
        // 接收
        var readBuff = new byte[1024];
        //Receive 方法接收一个 byte [] 存储接收到的数据,并返回数据的大小,会阻塞线程
        var count = _socket.Receive(readBuff);
        string recvStr = System.Text.Encoding.Default.GetString(readBuff, 0, count);
        infoText.text = "提示信息:" + recvStr;
        _socket.Close();
    
    }
}

服务器端代码如下:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace netWork_Server
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hi");
            Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            IPEndPoint ipEndPoint=new IPEndPoint(ipAddress,8888);
            socket.Bind(ipEndPoint);
            //listen
            socket.Listen(0);
            Console.WriteLine("[服务器] 启动成功");
            while (true)
            {
                //Accept
                Socket connfd = socket.Accept();
                Console.WriteLine("[服务器] Accept");
                //Receive
                byte[] readBuff=new byte[1024];
                int count = connfd.Receive(readBuff);
                string readStr = System.Text.Encoding.Default.GetString(readBuff, 0, count);
                Console.WriteLine("[服务器接收] "+readStr);
                //send
                var reStr = DateTime.Now.ToString();
                byte[] sendBytes = Encoding.Default.GetBytes(reStr);
                connfd.Send(sendBytes);
            }
        }
    }
}

这样我们就可以在客户端和服务器之间构建 Socket 连接咯,至此第一章的内容就结束了,第一章并没有讲太多东西,只是简单的介绍了以下 Socket 通信的基本原理和一些 Socket 相关的方法 API,东西虽然不多但是此时此刻我们已经不是一个人了。我们的游戏联网了