Unity 网络编程一: Echo程序
1.Echo程序是什么?
Echo程序是网络编程中最基础的一种案例,分为客户端与服务端。Echo程序的流程是客户端发送一段文本信息,服务器再把这个文本进行回应。
2.实现
客户端:
使用UGUI组件搭建一个简易的窗口,1是连接按钮,2是输入文本框,3是发送文本按钮,4是显示文字
我们在再写一个Echo名称的脚本,挂在一个空物体上:
using System.Net.Sockets; using TMPro; using UnityEngine; public class Echo : MonoBehaviour { private Socket _socket; public TMP_InputField InputField; public TMP_Text Text; public void Connection() { // 地址族 , 套接字类型, 协议类型 _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(); } }
连接时:客户端只需要建立一个Socket,并且连接好目的地址的IP地址和端口号。
发送时:socket中只能发送 byte[] 类型的字节流,所以要进行转换;之后会调用一个Receive方法,这个方法是一个阻塞的方法如果接收不到信息就会阻塞持续等待。
值得注意:Socket对象中的套接字类型,Stream是游戏开发中最常用的,使用TCP实现,当然会还有很多,可自行查看文档。
服务端:
因为是简易的服务器,所以我们先使用本地的控制台当做一个服务器,从自己编译器中新建一个控制台程序,然后输入以下:
using System; using System.Net; using System.Net.Sockets; namespace GameService { class MainClass { public static void Main(string[] args) { Console.WriteLine("Hello World"); // Bind Socket listenfd = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 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 = listenfd.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 byte[] sendByte = System.Text.Encoding.Default.GetBytes(readStr); connfd.Send(sendByte); } } } }
服务端首先也会创建一个 socket,并与Ip地址端口号进行绑定,之后开始监听客户端连接;开启监听后,会使用Accept方法进行接收,这个方法也是一个阻塞方法。如果能接收到就发送确认信息给客户端。
这样一个Echo程序就完成了,测试一下:
这样我们就实现了一个服务器与客户端的通讯,但是目前的系统服务器每次只能处理一个客户端的需求。如果要实现一对多则需要学习更多其他网络编程的知识。