Unity——Socket

Socket套接字的作用

        它是C#提供给我们用于网络通信的一个类(在其他语言当中也有对应的Socket类)

        类名:Socket

        命名空间:using System.Net.Sockets

        Socket套接字是支持TCP/IP网络通信的基本操作单位

        一个套接字对象包含

                1.本机的IP地址和端口

                2.对方主机的IP地址和端口

                3.双方通信的协议信息

        一个Socket对象表示一个本地或者远程套接字信息

        它可以被视为一个数据通道

        这个通道连接与客户端和服务端之间

        

        一般在制作长连接游戏时,我们会使用Socket套接字作为我们的通信方案

        我们通过它连接客户端和服务端,通过它来收发消息

        你可以把它抽象的想象成一根管子,插在客户端和服务端应用程序上,通过这个管子来传递交换信息

Socket的类型

        1.流套接字

                主要用于实现TCP通信,提供了面向连接、可靠的、有序的、数据无差错且无重复的数据传输服务

        2.数据报套接字

                主要用于实现UDP通信,提供了无连接的通信服务。数据包的长度不能大于32KB,不提供正确性检查,不保证顺序,可能出现重发、丢失等情况

        3.原始套接字

                主要用于实现IP数据包通信,用于直接访问协议的较低层,用于侦听和分析数据包

        通过Socket的构造函数,可以申请到不同类型的套接字

Socket s = new Socket();

        参数一:AddressFamily 网络寻址 枚举类型,决定寻找方案

InterNetwork

IPv4寻址
InterNetwork6 IPv6寻址
UNIX UNIX本地到主机地址
ImpLink ARPANETIMP地址
Ipx Ipx或SPX地址
Iso ISO协议的地址
Osi OSI协议的地址
NetBios NetBios地址
Atm 本机Atm地址

         

        参数二:SocketType 套接字枚举类型,决定使用的套接字类型

常用
Dgram

支持数据报,最大长度固定的无连接、

不可靠的消息(主要用于UDP通信)

Stream 支持可靠、双向、基于连接的字节流(主要用于TCP通信)
不常用
Raw 支持对基础传输协议的访问
Rdm 支持无连接、面向消息、以可靠方式发送的消息
Seqpacket 提供排序字节流的面向连接且可靠的双向传输

        参数三:ProtocolType 协议类型枚举类型,决定套接字使用的通信协议

常用
TCP TCP传输控制协议
UDP UDP用户数据报协议
做了解
IP IP网际协议
Icmp Icmp网际消息控制协议
Igmp Igmp网际组管理协议
Gap 网关到网关协议
IPv4 Internet协议版本4
Pup PARC通用数据包协议
Idp Internet数据包协议
Raw 原始IP数据包协议
Ipx Internet数据包交换协议
Spx 顺序包交换协议
IcmpV6

用于IPv6的Internet控制消息协议

        2、3参数的常用搭配:

SocketType.Dgram + ProtocolType.Udp = UDP协议通信

SocketType.Stream + ProtocolType.Tcp = TCP协议通信

SocketType.Raw + ProtocolType.Icmp = Intermet控制包文协议

SocketType.Raw + ProtocolType.Raw = 简单的IP包通信 

        //TCP流套接字
        Socket socketTcp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        //UDP数据报套接字
        Socket socketUdp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

Socket的常用属性

        1.套接字的连接状态

if(socketTcp.Connected){}

        2.获取套接字的类型

print(socketTcp.SocketType);

        3.获取套接字的协议类型

print(socketTcp.ProtocolType);

       4.获取套接字的寻址方案

 print(socketTcp.AddressFamily);

        5.从网络中获取准备读取的数据数据量

print(socketTcp.Available);

        6.获取本机EndPoint对象(注:IPEndPoint继承EndPoint)

socketTcp.LocalEndPoint as IPEndPoint

        7.获取远程EndPoint对像

socketTcp.RemoteEndPoint as IPEndPoint

Socket的常用方法

        1.主要用于服务端

                1-1:绑定IP和端口

IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);

                1-2:设置客户端连接的最大数量

 socketTcp.Listen(10);

                1-3:等待客户端连入

socketTcp.Accept();

        2.主要用于客户端
                1-1:连接远程服务端

 socketTcp.Connect(IPAddress.Parse("118.12.123.11"), 8080);

        3.客户端服务端都会用的

                2-1:同步发送和接收数据

 socketTcp.Send();

                2-2:异步发送和接收数据

socketTcp.SendAsync();

                2-3:释放连接并关闭Socket,先与Close调用

 socketTcp.Shutdown(SocketShutdown.Both);

                2-4:关闭连接,释放所有Socket关闭资源

socketTcp.Close();

猜你喜欢

转载自blog.csdn.net/m0_51743362/article/details/124934914