乐趣区

关于前端:如何用Echo程序去制作游戏页面

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();}}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
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 脚本拖到场景中任意物体,并给 Inputfield 和 Test 两个属性赋值。并给两个按钮增加点击事件,调用 Echo 组件中相应的办法。

例如:在 www.sangpi.com 中退出了 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);
         }
       }
  }  }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
绑定 Bind

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

监听 Listen

服务端通过 listenfd.Listen(backlog) 开启监听,期待客户端连贯。backlog 示意指定队列中最多可包容期待承受的连接数。0 示意不限度。

应答 Accept

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

IPAddress 和 IPEndPoint

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

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

后续会尝试看能不能开发!

退出移动版