从零开始学Socket:前言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15020543/article/details/83961444

我学习Socket的动机很简单,我要做一个基于Socekt的网络游戏。

关于Socket的基础概念以及相关知识,请大家自行百度。

既然谈到Socket,就得牵扯到服务器端,什么是服务器端呢?

个人理解:服务器端就是自己的代码,让它跑在云主机(云服务器上,比如阿里云,亚马逊云这些)。而这些,其实就是在云端买了一个主机,它和你正在使用的电脑一样,有桌面,有系统,有蜘蛛纸牌。。。

不同的是,它有固定的公网IP,而我们电脑公网IP是变化的(所以如果要把自己电脑变成服务器的话需要用花生壳做内网穿透)。

所以我们要把代码里绑定IP和连接IP的地方改成服务器的公网IP就行了。然后只需要把你服务器代码生成的exe文件在上面打开。让它365天没日没夜开着机就行了。

那么Socket到底是个啥?

先看一张图

Socket是一个接口,是应用层与TCP/IP协议族通信的中间软件抽象层,在用户进程与TCP/IP协议之间充当中间人,完成TCP/IP协议的书写,用户只需理解接口即可。 

在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。它的出现只是使得程序员更方便地使用TCP/IP协议栈而已。Socket本身并不是协议,它是应用层与TCP/IP协议族通信的中间软件抽象层,是一组调用接口(TCP/IP网络的API函数)。

TCP/IP协议又是个啥?

从上图可以看出可以看出TCP/IP协议族包括运输层、网络层、链路层。TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket编程接口

Socket跟TCP/IP并没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以,Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。

socket只是对TCP/IP协议栈操作的抽象,而不是简单的映射关系,这很重要!

通俗点讲:

可以这样理解,你可以简单的理解为电话号码。你这边一个电话号码 发送信息,另一个电话号码接收你发送的消息。而中间传输这些信息的过程和技术就是TCP/IP,我们不需要了解,我们只需要知道要拨打的号码(Socket ip地址和端口)即可。你用的这个号码指定发给哪个号码,就只有哪个号码可以接收你发送的消息。这两个电话可收信息,可发信息。就是担任着Socket的角色。两个手机就是你用的电脑了。Socket也一样,指定了ip和端口就变成独一无二的电话号码了。​​​​​​​

参考:https://www.cnblogs.com/battler/archive/2007/01/22/626846.html

           https://blog.csdn.net/github_34606293/article/details/78230456

           https://zhidao.baidu.com/question/531812409.html

           https://blog.csdn.net/weixin_39258979/article/details/80835555

猜你喜欢

转载自blog.csdn.net/qq_15020543/article/details/83961444
今日推荐