Unity面试题整理(4)--Socket知识点扫盲
来源:互联网 发布:华为编程大赛题目 编辑:程序博客网 时间:2024/05/20 09:44
Socket构造
public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);
依次来看各个参数类型
AddressFamily:直译过来就是地址家族。地址大家族有很多种类,有ipv4,ipv6,app talk等等,他们都有对应的名字,比如ipv4对应的AddressFamily名字是InterNetwork,这个是最常用的,ipv6名字是InterNetworkV6。
SocketType:Socket的类型有Dgram,Raw,Rdm,Seqpacket,Stream,Unknown。这里只简单解释常见的几种。
*Dgram
特点
分组可能无序到达
分组可能丢失,丢失时无补救措施,接收方不知道丢失
分组有尺寸大小限制
发送前无需建立连接,可同时发给多个端
*Stream
特点
不保留消息边界
保证发送与接收的字节顺序一致
保证接收的数据与发送的数据一致,如果有错误会自动进行修复,修复如果失败,会通知发送方和接收方
发送前须建立连接,一对一传输
啥叫消息边界?
消息边界指的就是划分每次写入操作的数据的边界。如A向B发送消息,第一次写入20字节,紧接着第二次写入30字节。A进行了两次独立的写入操作, 可能是将一个消息分成两次写操作,也可能是两个消息,而接受方B并不关心A执行了几次独立的写操作,而是把接收到的50字节作为整体来接收,而无法判断出第一次写入的20字节与第二次写入的30字节的边界在哪里,这就是Stream不保留边界的特点。
*Seqpacket
特点
保留边界消息,这是与Stream不同的地方,比如第一次发送20字节,第二次发送30字节,那么接收方读取也是先读20字节,再读30字节
保证发送与接收的字节顺序一致
保证接收的数据与发送的数据一致,如果有错误会自动进行修复,修复如果失败,会通知发送方和接收方
发送前须建立连接,一对一传输
ProtocolType:协议类型有很多,IP,IPv4,IPv6,Tcp,Udp,Http,这里只简单介绍这几种常见的。TCP/IP模型分为四层,应用层,运输层,网络层,链路层。每个层都有不同的协议,见下图(图片来自网络)。
我们最常接触的就是Tcp,Udp,Http。Http在web请求中应用广泛,而游戏中我们需要客户端与服务器之间需要双向通信,所以选择socket,使用Tcp协议。
Tcp协议是面向连接的,也就是进行数据通信前必须先建立连接。连接的过程需要“三次握手”。
客户端说:服务器,我的代号是j,请确认我的身份
服务器说:好的,已确认你的身份(返回j+1表示),我的代号是k,请确认我的身份
客户端说:好的,已确认你的身份(返回k+1表示)
连接建立,数据通信。
TCP常用Flag字段有:SYN(synchronous同步) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
TCP断开连接时,需要“四次握手”
主动关闭方:我要关闭了,代号m
被动关闭方:收到并确认代号(返回m+1)
那我也关闭了,代号n
主动关闭方:收到并确认代号(返回n+1)
(以上抛砖引玉一下,我们重点还是应用,具体细节可参考《TCP/IP详解》)
上升到应用层,梳理一下建立socket通信的步骤:
服务器:
1建立socket
2绑定服务器ip,要监听到端口
3Accept等待连接
4Accept收到连接请求后,通过客户端socket读取数据
5读取到数据后,解析,处理,整理响应数据
6通过客户端socket写入数据,该socket关闭,回到3
客户端:
1建立socket,绑定服务器地址,端口
2socket发起连接请求
3socket写入数据
4socket读取数据
5socket关闭
实践:一个剪刀石头布的小游戏
游戏逻辑:两个玩家连上服务器后,在10秒内需要选择手势,服务器收到两方手势后,产生结果,发送结果给游戏双方,并开始下轮游戏。
(待续)
0 0
- Unity面试题整理(4)--Socket知识点扫盲
- Unity面试题整理(3)--unity知识点扫盲
- [Unity]面试题整理
- 【Unity】面试题整理
- unity面试题整理(2)--GC
- python 面试题 - 知识点整理
- python 面试题 - 知识点整理
- Unity知识点详解面试题大全
- Java面试题以及知识点整理(1)
- unity面试题整理(1)--字符串
- C++面向对象面试题知识点整理
- Java基础面试题知识点整理
- Java知识点及其面试题整理二
- Java知识点及其面试题整理三
- Unity试题整理(1)
- 笔面试题相关知识点整理(一)--隐式类型转换
- 前端面试题整理-------HTML/CSS部分----小知识点
- 面试题整理(二)
- 十四章 小练习
- [置顶] Agavi 框架
- [置顶] xser php framework 0.2 设计构想
- uc/OS-II读书笔记
- [置顶] PHP5 面向对象的一个新疑惑点,类对象实例竟然能访问类中私有方法,不知道是不是bug
- Unity面试题整理(4)--Socket知识点扫盲
- JavaScript toFixed() 方法
- [置顶] 在写的php 简单的orm实现 -- 用以解决昨天面试时的sql测试题
- [置顶] ZF框架学习笔记
- [置顶] 记录字段值唯一性检查 解决方案
- java 商场的幸运抽奖 关键代码
- pooling的几种形式
- [置顶] 改一个PHP WEB SHELL
- 安卓 Cordova 自定义插件生成安装包