网络游戏基础知识
作者:互联网
1、多个玩家如何进行网络通信 ?
每个玩家都是在客户端,如果需要相互之间进行通信,需要通过一个很大的服务器进行消息传递;
那么玩家和服务器怎么进行通信,用什么进行通信?
一个玩家肯定有一台计算机,而计算就应该有自己的IP地址,假如一个程序qq想要和另一台计算机的qq通信应该怎么办?
首先在计算机两端都应该建立Socket,其实看似是两个程序之间的通信,其实就是两个Socket之间的通信,一个用于发送消息,而另一个用于接收消息;
那么为什么一个Socket和另一个Socket之间可通信呢? 其实只要知道两个计算机的IP地址和彼此之间的端口号就可以实现,说到底,他们之间实现通信,
就是因为端口号和端口号之间的通信。
就比如一台计算机上有qq和微信两个应用程序,甚至可以安装更多的程序,但是一台计算机只有一个IP地址,那么他们之间并不会产生冲突,如何实现?
就是他们一定选择了不同的端口号进行信息的传递,就这么简单。
2、在Unity当中实现信息传递的一个简单实例
--------------------------------------客户端--------------------------------------------------
我们假设Unity编写出来的程序位客户端,如何写一个客户端程序?
客户端应该要完成3件事
1)能够连接到服务器,应该有一个连接按钮;
2)能够向服务器发送消息,就应该有一个输入消息框和一个发送按钮;
3)能够接收服务器发来的消息,有一个接收框。
接下来就需要写脚本实现上面的功能
1、写连接方法,然后注册到连接按钮上,也就是注册事件;
2、写发送方法,然后注册到发送按钮上;
完整代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Net.Sockets; using UnityEngine.UI; public class Echo : MonoBehaviour { //定义套接字 Socket socket; //定义UGUI public InputField inputField; public Text text; // 点击连接按钮 public void Connection() { //Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Connect 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); //Receive 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(); } }
------------------------------------------------------服务器----------------------------------------------------------
标签:System,socket,通信,基础知识,网络游戏,using,public,Socket 来源: https://www.cnblogs.com/Optimism/p/12245417.html