zoukankan      html  css  js  c++  java
  • 【Unity学习笔记】Unity网络游戏开发实战(一)---网络编程的开端:Echo程序

    在阅读本篇博客前,你需要掌握的内容和须知:

          Unity的基本操作和UGUI的基本使用

               对C#有基本了解和使用

         本博客是笔者学习《Unity3D网络游戏实战(第2版)》写下的学习笔记。感兴趣的朋友也可以了解一下这本书。

    Echo程序

      Echo程序是网络编程中最基础的案例。建立网络连接后,客户端向服务端发送一行文本,服务端收到后将文本发送回客户端。

      此处Echo程序分为客户端和服务端两个部分,客户端部分使用Unity实现。为了统一,服务端这里用C#实现。

    客户端

      在Unity制作简单的UGUI界面。

        需要的UI包括:

        ①ConnectButtion 连接按钮(用于和服务端建立连接)

        ②InputField  输入框

        ③SendButton 发送按钮

        ④Text 文本框 (用于显示服务端返回的文本)

      下面先给出Echo.cs脚本的代码

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Net.Sockets;
    using UnityEngine.UI;
    
    public class Echo : MonoBehaviour
    {
        Socket socket;
    
        public InputField InputField;
        public Text text;
    
        public void Connection()
        {
            //Socket
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
            socket.Connect("127.0.0.1",8888);
        }
    
    
        public void Send()
        {
            //Send
            string sendStr = InputField.text;
            byte[] sendBytes = System.Text.Encoding.Default.GetBytes(sendStr);
            socket.Send(sendBytes);
          
            //Recv
            byte[] readBuff = new byte[1024];
            int count = socket.Receive(readBuff);
            string recvStr = System.Text.Encoding.Default.GetString(readBuff, 0 , count);
            text.text = recvStr;
    
            //Close
            socket.Close();
        
        }
    }  

    Connection()

      客户端通过socket.connect(远程IP地址,远程端口)来连接服务端。

    Send()

      客户端通过socket.Send()发送数据。本方法接受一个byte[]类型的参数指明要发送的内容。所以需要用System.Text.Encoding.Default.GetBytes()把输出到输入框的字符串转换为Byte[]数组,再发送数据。

    Receive()

      客户端通过socket.Receive()接收服务端数据。之后使用System.Text.Encoding.Default.GetString(readBuff,0,count)byte[]数组转换为字符串再显示到屏幕。

    Close()

      客户端通过socket.Close()关闭连接。

      随后只需要将Echo.cs脚本拖到场景中任意物体,并给InputfieldTest两个属性赋值。并给两个按钮添加点击事件,调用Echo组件中相应的方法。

      例如:ConnectButton的点击事件为调用Echo组件Connection方法。

           

    服务端

      在MonoDevelop或是Visual Studio等工具中创建一个Console控制台程序

      服务端代码如下(使用C#)

    using System;
    using System.Net;
    using System.Net.Sockets;
    namespace EchoServer
    {
        class MainClass
        {
             public static void Main(string[] args)
             {
                Console.WriteLine("Hello world!");
    
                Socket listenfd = new Socket(AddressFamily.InterNetwork,
             SocketType.Stream, ProtocolType.Tcp);
    
                //Bind
                IPAddress ipAdr = IPAddress.Parse("127.0.0.1");
                IPEndPoint ipEp = new IPEndPoint(ipAdr, 8888);
                listenfd.Bind(ipEp);
                //Listen
                listenfd.Listen(0);
                Console.WriteLine("[服务器]启动成功”);
                while(true)
                {
                    //Accept
                    Socket connfd = listendfd.Accept();
                    Console.WriteLine("[服务器]Accept");
                    //Receive
                    byte[] readBuff = new byte[1024];
                    int count =  connfd.Receive (readBuff);
                    string readStr =
    System.Text.Encoding.Default.GetString(readaBuff, 0 , count);
                    Console.WriteLine("[服务器接收]"+readStr);
                    //Send
                    byte[] sendBytes =         System.Text.Encoding.Default.GetBytes(readStr);
                    connfd.Send(sendBytes);
                 }
               }
          }  
    }    
        
                                         

    绑定Bind

      listenfd.Bind(ipEp)将给listenfd套接字绑定IP和端口。这里使用的127.0.0.1是回送地址,指本地机,一般用于测试。

    监听Listen

      服务端通过listenfd.Listen(backlog)开启监听,等待客户端连接。backlog表示指定队列中最多可容纳等待接受的连接数。0表示不限制。

    应答Accept

      开启监听后,服务器通过listenfd.Accept()接受客户端连接。

    IPAddress和IPEndPoint

      使用前者指定IP地址,使用后者指定IP和端口。

    测试

      运行服务端和客户端程序。点击客户端的连接按钮,在文本框输入文本再点击发送按钮。服务端会返回你输入的内容到Text内。

  • 相关阅读:
    MYSQL中replace into的用法
    Typora自定义样式
    Advanced Installer轻松带你入门
    H2数据库入门,看这篇就对了
    Linux之vim的使用
    Linux文件上传与下载
    @ConfigurationProperties 注解使用姿势,这一篇就够了
    Javadoc 使用详解
    MySQL学习提升
    JS前端获取用户的ip地址的方法
  • 原文地址:https://www.cnblogs.com/Neko-YG/p/13583813.html
Copyright © 2011-2022 走看看