Unity学习笔记:Unity调用网络协议

60 篇文章 2 订阅
2 篇文章 0 订阅

TCP协议 安全有效的协议方式 客户端连接主机会在后台进行三次握手。


using System.Nett.Sockets引用数据库

Socket socket = new Socket(AddressFamily.InterNetwork,SockeType.Stream,ProtocolType.TCP);创建一个套接字,套接字相当于在TCP协议中创建一个并未指定是客户端还是服务器的端口,第一个参数传入的是自身的IP,第二个参数意思是端口进行数据传输的方法是流,第三个参数是根据TCP协议创建。

IPEndPoint endPoint = new IEndPoint(IPAddress.Parse(ip),int);创建一个监听端口(服务器),指定端口用来监听其他端口的连接(使它变成服务器),第一个参数是自身的IP,第二个参数是可以连接进入的端口号。

socket.Bind (endPoint);将监听端口和套接字绑定(把socket端口变成服务器)

socket.Connect(IPAddress.Parse(ip), 56666);将端口变为客户端并进行连接服务器操作,第一个参数是连接进的服务器的IP,第二个参数是连接进入的端口(第二个参数的端口号必须与服务器开放的端口号相同)。

socket.Listen(100);如果你的端口是服务器时,设定最多100个玩家连接进服务器

socket.BeginAccept(委托名 socket);异步操作,通过监听操作来监听参数二的服务器端口是否有客户端连接进入,监听满足时执行一次委托(注意:监听操作只会在满足条件时执行一次委托,委托完成后监听方法将永远失效,想要无限次监听请在监听最后重新调用一次监听方法)

socket.BeginAccept用到的委托:没有返回值具有一个IAsyncResult参数的委托,这个参数中保存着连接进来的客户端的各种数据信息。

Socket a = socket.EndAccept(IAsyncResult) 第一个参数是监听中委托获得的参数,通过服务器端口调用EndAccept方法,将IAsyncResult中保存的数据信息存到一个新的端口中。

Dns.GetHostName();获取计算机的名字。
Dns.HostEntry(string);传入一个主机名字,返回一个IP地址的数组。

Socket.Available 返回一个该端口向服务器传输的数据的数量(是否向服务器传输数据)

Socket.Receive(byte[])将该端口传向服务器的数据保存到一个二进制的数组中,然后将文件向服务器传输的数据删除(方法会自动删除)(如果用户没发送消息,则代码运行会堵塞等待用户发送消息后继续执行)

Socket.Send(byte[])传入一个二进制,并将该二进制数组传输到服务器端口,当服务器调用该方法时,可以通过调用指定玩家套接字.Send来想客户端发送消息。

Socket.Connected 客户端方法,返回自己现在是否正在连接服务器(bool)

IFormatter.Deserialize 反序列化

MemoryStream ms = new MemoryStream()在内存中开辟空间储存流,如果不传入参数则为空的流,可以穿入一个byte数组为流中的内容。
IFormatter iFormatter = new BinaryFormatter();!!接口的用法!!实例化一个继承IFormatter接口的类并给IFormatter 赋值,接口中的方法为被实例化的BinaryFormatter中实现接口中的方法。
IFormatter.Serialize(MemoryStream,object) 序列化方法,将传入的第二个参数传入的object对象转化为二进制数组并保存到参数一种的内存流中。
byte[] = MemoryStream .GetBuffer();返回一个内存流中的保存的二进制数组,并返回到一个二进制数组中。
object = IFormatter.Deserialize(MemoryStream)
反序列化,传入一个内存流,返回一个由二进制数组解析出来的object类型的变量
byte[] = BitConverter.GetBytes(任意值类型)将传入的参数转换为二进制数组并返回出来

UDP协议:

UDP协议是一种不建立连接的协议,只会根据IP发送或接受数据,发送数据可以不管对方是否收到。

UDP单播:

UDP套接字:Socket UDP = new Socket(AddressFamily.InterNetwork,SocketType.Daram,ProtocolType.Udp);创建一个UDP格式的套接字。

IpEndPoint ipEndpoint = new IpEndPoint (IP,端口) 创建一个终端并指定IP和开启的端口。

Socket.Bind(IpEndPoint)将创建的终端和自己的套接字绑定。

Socket.SendTo(byte[],IpEndPoint)向其他客户端发送消息,第一个参数是发送的消息,第二个参数是发送对象的终端。

Socket.Available 同样适用于UDP的判断自身收到数据的数量。

UDP广播:(未实现,存在问题)

Udp广播的思路是在局域网内创建一个收听所有消息的终端(耳朵),然后定义一个向整个局域网发送消息的临时终端(喇叭),然后发送端发送的消息将传到所有开启监听的端口,并且能够在监听内容方法中获得发送方的IP

UdpClient = new UdpClient(new IPEndPoint(IPAddress.Any,56666)) 定义一个用来接收广播消息的终端,并开放一个56666的端口。
UdpClient = new UdpClient(new IEndPoint(IPAddress.Any,0))定义一个用来发送消息而不能接收消息的临时终端,这个终端的端口可以是任意。
IPEndPoint endpoint = new IPEndPoint(IPAddress.Broadcast, 56666);定义一个发送的目标点,这个目标点的发送方式为广播(发送局域网内所有Any类型的监听全局的终端)发送向的端口是56666
UDPrecv.BeginReceive(new AsyncCallback(ReceiveCallback), null);监听调用方法的终端是否收到消息,收到消息就异步执行ReceiveCallback方法。(IAsyncResult方法需要有一个IAsyncResult参数来保存传入用户信息)

UDP组播:(未实现,存在问题)

Udp组播的思路是创建一个只有端口没有IP的终端并将其添加到一个IP组内,然后发送消息时向该IP组直接发送,处于该IP组内的所有用户都能收到消息。(计算机开放的组播端口为224.0.0.0到238.255.255.255之间)

UdpClient = new UdpClient(56666);创建一个只有端口的终端
UdpClient.JoinMulticastGroup(224.1.1.1); 将一个只有端口的终端加入到一个IP组中。
IPEndPoint groupEP = new IPEndPoint("224.1.1.1,56666");定义一个发送的目标点并让他指定IP组和开放的端口
UdpClient.Send(string,int,IPEndPoint)发送消息,调用Send方法的UdpClient可以无端口和IP(实例化无参数)第一个参数为发送的消息,第二个参数为消息的数量,第三个参数为发送到的IPEndPoint(组播IPEndPoint的IP必须是IP组的IP,端口必须为在IP组内的终端开启的端口)
byte[] = UdpClient.Receive(ref IPEndPoint)监听UdpClient收到的消息,并将消息返回给byte[]数组,ref返回的参数是发送方的终结点。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值