Unity3d实战之Unity3d网络游戏实战篇(4):网络基础之Socket套接字
学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版社
本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍
以下为个人的学习简记,与诸君共论 由于U3D的官方案例Tank Tutorial中对坦克的基本操作已经有了详尽的描述,因此本文着重于面板系统、服务端基本网络框架和客户端基本网络框架的搭建
如有疑问或者描述错误的地方,欢迎各位提出或修正,讨论交流是获取和巩固知识的重要途径之一!
Socket套接字
Socket是支持TCP/IP协议网络通信的基本操作单元,可以将套接字看作不同主机间的进程双向通信的端点。举个栗子,小时候玩过的传声筒(如图),传声筒的一段的杯子就类似于Socket,两个人之间要进行通信首先都要有一个杯子(Socket),然后两个杯子之间要有一条线(TCP连接),如果不熟悉TCP连接可以翻看上一节内容。
Socket的通信基本流程:
1. Server需要创建一个Socket,然后绑定一个端口(端口的基本概念请自行搜索)然后进行监听;
2. Client通过Connect方法连接Server,Server的Socket通过Accept接收Client连接请求,在connect-accept过程中将会进行三次握手;
3. 连接建立后,两端可以相互发送数据,直到一方发出关闭连接请求,四次挥手后,关闭连接。
在整个流程中我们需要做的就是实现逻辑,具体的三次握手、四次挥手、数据收发的确认将会由操作系统完成。
同步Socket
同步Socket能够实现Server和Client两端之间的通信,下面给出简单的实例:
在这里,Server和Client都使用Console Project实现,如果想更直观,可以自行制作GUI界面的程序。
Server:
using System;
using System.Net; // Remember add Net & Net.Sockets namespace;
using System.Net.Sockets;
namespace Server
{
class MainClass
{
public static void Main (string[] args)
{
// Console.WriteLine ("Hello World!");
Socket servSk = new Socket (
AddressFamily.InterNetwork, // Address for IPv4
SocketType.Stream, // DataType for stream
ProtocolType.Tcp); // Tcp Protocol
string servId = "127.0.0.1";
int servPort = 2333;
IPAddress ipAdr = IPAddress.Parse (servId);
IPEndPoint ipEp = new IPEndPoint (ipAdr, servPort);
servSk.Bind (ipEp); // Bind
servSk.Listen (0); // Listen
Console.WriteLine ("[Program.Main] Server start.");
while (true) {
Socket connSk = servSk.Accept ();