Unity3D游戏制作学习记录01——丛林战争

Unity3D游戏制作学习记录01——丛林战争

Siki学院的视频教程指路牌:http://www.sikiedu.com/course/61.
学业繁忙…和朋友一起跟着siki的丛林战争的教程跟着做来交作业,仅用于学习笔记记录,最终的成品效果也不知道,翻不翻车我们拭目以待(●ˇ∀ˇ●)

TCP/IP介绍

在网络通信中,路由器是起到一个中转站的作用,发送的目的主机就是靠路由器识别IP转发,IP就是目的主机的地址。

IP粗略分类:

局域网IP:是可以通过ipconfig查询到的,是在连接同一个路由的主机构成的一个局域网内,由路由分配的IP。在这个局域网内,IP唯一且不可重复。(本地坐标系)
公网IP:不可以在本地查询,它是该局域网内的主机对于外界的位置标识,是同一局域网内主机共享的IP。可以通过百度查找得到。(世界坐标系)

端口号

由于IP可以定位到主机,主机上不同的要通信的程序占用着不同的端口,因此要到软件的话,需要IP+端口来定位。

一、服务器端——简单收发

① 工程创建

VS2019 项目类型:C# .Net Framework 控制台应用
.net framework
创建服务器项目:TCPServer
服务器新项目

② 代码编写

实现步骤

  1. 创建套接字,一般是指定套接字绑定ip的类型(IPv4/IPv6),套接字通信的类型,套接字所使用的协议;
  2. 套接字绑定IP;由于现在的主机一般都是配置了两个网卡,有的甚至更多,我们要让这个套接字知道是监听哪一个ip的通信消息,所以要为套接字绑定IP。
    关于IP:我们除了ipconfig 查看到对应IP,也可以填写“127.0.0.1”,这个IP是默认当前主机的IP,如果实在不清楚,就可以直接写这个。
    IPaddress: 就是IP地址,即127.0.0.1
    IPEndPoint: IP:Port,IP地址加上端口号127.0.0.1:xxxxxx
  3. 把套接字开启监听,监听方法的参数是int类型的,它表示的是处理客户端请求的数量,即可以处理的等待队列的长度,但不表示可以容纳服务器的最大连接数,参数为0时表示无限制。
    class Program
    {
        static void Main(string[] args)
        {
            //用于通信的套接字: IP类型,套接字类型:管道通信, 协议:TCP
            Socket serverScoket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
            // 定义IP
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            int port = 7788;
            IPEndPoint iPEndPoint = new IPEndPoint(ipAddress, port);
            
            // 绑定IP
            serverScoket.Bind(iPEndPoint);
            
            // 开启监听
            serverScoket.Listen(0);
        }
    }
  1. 监听开启后,要接收所收到的连接请求,接收连接的方法Accept()执行过程中会一直等待,直到有连接了才会执行Accept()下面的代码。而Accept()会返回一个Socket类型的变量,是关于监听到的客户端套接字的连接。
  2. 尝试向客户端发送一条消息,并简单接收一下客户端发来的消息
    关于接收客户端的消息,由于我们不肯定接收的消息的长度,因此Receive()方法会有一个int返回值,是返回的消息的字符数。在转换为字符串的时候,我们需要指明是从第几个位置开始读,读多长的消息内容。
  3. 因为仅用于测试,因此我们在上述一些操作之后,我们把和客户端的连接关闭掉,服务器也关闭掉。
    要注意的是:客户端是否关闭,服务器并不能控制,这里仅仅是把连接关闭。
            // 等待连接,直到接收到连接请求
            Socket clientSocket = serverScoket.Accept();

            // 向客户端发送一条消息(二进制)
            string msgSend = "连接成功,服务器向客户端发送消息...";
            byte[] msgByt = System.Text.Encoding.UTF8.GetBytes(msgSend);
            clientSocket.Send(msgByt);

            // 定义缓存区,接收客户端发来的消息
            byte[] readBuf = new byte[1024];
            int count = clientSocket.Receive(readBuf);
            string msgRecv = System.Text.Encoding.UTF8.GetString(readBuf, 0, count);
            Console.WriteLine(msgRecv);

            Console.ReadKey();

            // 关闭连接
            clientSocket.Close();
            serverScoket.Close();

二、客户端——简单收发

在原来的解决方案上,右键添加新项目:TCPClient
新建服务器项目

具体代码

客户端发送消息,由用户自定义输入用于检测,并在连接断开前,都补充了Console.ReadKey();用于观察结果。

        static void Main(string[] args)
        {
            //用于通信的套接字: IP类型,套接字类型:管道通信, 协议:TCP
            Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // 服务器请求连接客户端
            socketClient.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 7788));

            // 客户端接收消息
            // 定义缓存区,存储接收到的服务器消息
            byte[] readBuf = new byte[1024];
            int count = socketClient.Receive(readBuf);
            string msgRecv = System.Text.Encoding.UTF8.GetString(readBuf, 0, count);
            // 将消息显示在控制台上
            Console.WriteLine(msgRecv);

            // 客户端向服务器发送消息,发送的消息由用户在控制台输入
            string msgSend = Console.ReadLine();
            socketClient.Send(System.Text.Encoding.UTF8.GetBytes(msgSend));

            Console.ReadKey();

            // 关闭连接
            socketClient.Close();
        }

运行结果

  1. 首先运行服务器
    服务器
  2. 运行客户端,接收到和客户端发送的消息 在这里插入图片描述
  3. 客户端编辑自定义消息 在这里插入图片描述
  4. 服务器端消息接收
    在这里插入图片描述
原创文章 7 获赞 6 访问量 930

猜你喜欢

转载自blog.csdn.net/LAUGINJI/article/details/106101511
今日推荐