Unity游戏开发网络基础(2)

来源:互联网 发布:python 一段时间日期 编辑:程序博客网 时间:2024/05/22 12:03

套接字Socket

在网络游戏制作中,套接字是支持TCP/IP协议网络通信的基本操作单位,可以将套接字看做不同主机间的进程双向通信的端点,它构成单个主机内及整个网络间的编程界面。

参考:http://blog.csdn.net/cxh342968816/article/details/6336914


1.Socket连接的流程


步骤

①开启一个连接之前,首先要完成Socket和Bind两个步骤。新建一个Socket,Bind指定套接字IP和端口。

②服务端通过Listen开启监听,等待客户端接入。

③客户端利用Connect连接服务器,服务端通过Accept接受客户端连接。

④客户端和服务端通过write和read发送和接受数据。

⑤通过close关闭。


2.Socket类一些方法和属性

System.Net.Sockets命名空间

这里可查询:https://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket(VS.80).aspx


3.一个简单的小梨子(同步Socket程序)

服务端

using System;using System.Net;using System.Net.Sockets;/*服务端程序*/class MainClass{public static void Main(string []args){/*第一步,创建Socket*/Socket listenfd = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.TCP);/*第二步,绑定IP和端口*/IPAddress ipaddress = IPAddress.Parse("127.0.0.1");/*本地地址*/int port = 6666;/*程序端口号*/IPEndPoint ipEndPoint new IPEndPoint(ipaddress,port);listenfd.Bind(ipEndPoint);/*第三步,监听*/listenfd.Listen(0);/*不限制最大连接数目*/Console.WriteLine("服务器启动成功");while(true){/*第四步,客户端连接*/Socket connectfd = listenfd.Accept();/*连接服务器的客户端Socket*/ Console.WriteLine("客户端已连接");/*第五步,接受数据*//*容器(用于存放数据)*/byte[] readBuff = new byte[1024];/*接受客户端数据,保存到容器中并返回数据长度*/int count = connectfd.Receive(readBuff);/*将接受到的数据转换成string类型*/string str = System.Text.Encoding.UTF8.GetString(readBuff,0,count);Console.WriteLine("服务器接收数据" + str);/*第六步,发送数据*/byte[] writeBuff = System.Text.Encoding.Default.GetByte(str + "我已经接收到了");connectfd.Send(writeBuff);/*将接收到的数据加上信息发送给客户端*/}}}

客户端程序

using UnityEngine;using System.Collections;using System.Net;using Ststem.Net.Socket;public class Client : MonoBehaviour{/*第一步,创建Socket*/Socket socket;/*第二步,确定目标服务器的IP地址和端口(可以用任何方法获取)*/private string ipaddress = "127.0.0.1";/*IP地址*/private int port = 7777;/*端口*/void Start(){socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.TCP);/*第三步,连接*/socket.Connect(ipaddress,port);Debug.Log("客户端地址:" + socket.LocalEndPoint.ToString());/*第四步,发送数据*/string str = "Hello,Unity";byte[] bytes = Ststem.Text.Encoding.Default.GetByte(str);socket.Send(bytes);/*第五步,接收数据*/private const int BUFFER_SIZE = 1024;byte[] readBuff = new byte[BUFFER_SIZE];/*文件接受缓冲区*/int count = socket.Receive(readBuff);str = System.Text.Encoding.UTF8.GetString(readBuff,0,count);Debug.Log(str);/*服务器回应的数据*//*第六步,关闭连接*/socket.Close();}}

先开启服务端,再开启客户端,这样就能实现功能了。


相关要点:

①Socket构造函数的参数分别表示

△(AddressFamily)地址族:IPv4或IPv6,IPv4即InterNetwork

△(SocketType)套接字类型:http://www.cnblogs.com/istrong/archive/2012/06/10/2544357.html 有详细说明,游戏常用Stream。

△(ProtocolType)协议:https://msdn.microsoft.com/zh-cn/library/system.net.sockets.protocoltype.aspx

②Bind

给创建的listenfd套接字绑定IP和端口。

③Listen

开启监听,等待客户端连接。参数指定队列中最多可以容纳等待接受的连接数,0表示不限制。

④Accept(阻塞方法,就是客户端没有连接的时候在这里等待)

接受客户端连接,返回一个新的客户端Socket。

⑤Receive(阻塞方法)

接受数据

△参数:byte数组,存储接收到的数据。

△返回值:所接收数据的长度。

⑥Send

发送数据。

原创粉丝点击