游戏开发之网络篇_02 Socket简单介绍

10 篇文章 0 订阅
6 篇文章 0 订阅

写在前面,本片博文主要介绍Socket一些基本的内容知识,不会涉及到任何代码片段的提及,如有错误,望指出!

何为Socket???
现在我们都会经常使用一些软件,那么在网络上的两个应用程序通过一个双向的通信连接实现数据交换,这个连接端的一端被成为一个Socket。一个Socket又包含了哪些内容呢?
一个Socket要进行通信必备下面的内容:

  • 连接使用的协议
  • 本地主机的IP
  • 本地的协议端口
  • 远程主机的IP
  • 远程主机的端口
    我们可以通过现实生活中这样的一个例子来理解,想象一个你和你朋友打电话的情形。那么我们所说的Socket就可以理解为一部手机,本地主机就是你手中的手机,IP地址和端口就是你自己的手机号码,远程主机的IP和地址就是对方的手机号码,我们都知道打电话至少需要两部手机才能通话,那么我们的Socket也是如此,至少需要两个Socket才能进行互相通信。
    IP地址
    IP地址用官方一点的话来讲是这样的:IP是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。说白了网络上面的计算机都是通过IP地址来识别的,应用程序通过通信的端口彼此通信。直白的理解,就是每一个IP地址对应于一台计算机。
    端口
    端口是英文“Port”的意译,是设备与外界通信交流的出口,每一台计算机可以分配0~65535共65536个端口。
    端口是个逻辑的概念,在很久之前我们的计算机是没有端口这个概念的,因为当时的计算机没有多任务。只要两台计算机的IP地址,就可以实现通信了。
    举个例子吧,在很久之前,我们大家都是独门独户的,都是平方,没有那种高楼的概念,当我们给亲戚朋友寄信的时候只需要写上XXX路XXX号就可以了,但是随着我们经济的飞速发展,人们都开始住上了高楼了,这时候写信就会变成了XXX路XXX号XXX栋XXX室。
    那么我们的计算机也要发展的啊,计算机不再是单一任务了,计算机变成了多任务系统了.人们于是就定义了端口的概念来区分不同的任务,计算机于是就会通过IP和端口来和不同的计算机上面的应用程序进行通信了.
    TCP和UDP
    TCP和UDP是通信协议,只不过他们通信的时候有点不同,但是都可以通信.
    TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议,
    UDP是一种无连接的,不可靠的,但是传输效率较高的协议.

    (如果看到这里面的传输层不明白是什么意思的话,建议去百度一下网络OSI七层模型,简称"应,表,会,传,网,数,物"OSI七层模型.)
    换句话来说,TCP和UDP注重的地方不一样.TCP注重传输的可靠性,确保数据不会被丢失,但是速度会比较慢;
    而UDP注重传输速度,但是不能保证所有发送的数据对方都可以收到,基于以上的内容分析,我们的游戏中,当然是使用TCP来通信了,不然数据发送一半发现数据丢了,那玩家岂不是要退款了,哈哈哈~~~
    粘包问题
    什么叫粘包呢?简单的来说,当我们发送数据的时候,如果一次性发送了多条数据,那么我们的数据便会在接收端的那边进行堆积,很多信息叠在了一起,就会出现把两条信息当作一条信息进行处理的情况了.我们的TCP协议是基于流的数据,粘包现象很正常,但是这样可能会导致我们发送的消息服务端不能准备的明白用意,这样在商业级的项目中肯定是不行的.
    解决粘包现象的方法
    解决粘包的方法又很多种,这么我就不逐一介绍了.下面我将采用包头+数据信息的方法.其实很简单,就是在我们发送的数据的最前面加上数据的信息长度,在我们每次接收到数据后,先读取表示长度的字节,如果我们的缓冲区接收的数据长度大于要取的字节数,则取出对应的字节,否则等待下一次的数据接收即可.
    但是我们的包头会有一个问题,我们使用多少字节来表示长度呢? 一般现在都有两种表示方法.一种使用16位整数来存放信息长度,另一种使用32位长度来表示.
    16位整数型的取值范围是0~65535,
    32位整数的取值范围是0~4294967295.
    但是对于大多数游戏,网络消息的长度很难超过65535字节,使用16位整数来存放消息比较合适.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值