SOCKET套接字(一) 入门

SOCKET套接字(一) 入门

开篇第一博 献给socket
工作后接触的第一个小小的知识点就是socket,时间久了会忘,这里重新整理一下。
主要参考来自网络以及《Linux/UNIX系统编程手册(下册)》这本书,上手比较容易。

1. 概念理解

#1.1 怎么理解socket?
socket是一种进程间通信(IPC,Inter-Process Communication)方法,它允许同一主机上的应用程序之间进行通信、或者使用网络连接起来的不同主机上的应用程序之间交换数据。

当想让程序A和程序B之间进行通信,那么需要在A和B的程序中都建立自己的socket。它相当于A要和B打电话进行通信就需要各自家里装一部电话。这里的“socket”即可以理解为具有通信功能的设备。

但这部电话中的功能太强大,它是哪种通信类型,怎样打包数据,是否阻塞等,都需要在程序中去设置。方便的是已经有现成的函数让我们调用,我们要做的是熟悉这些函数的功能和入参组合的含义即可。

#1.2 服务器与客户端

这里的“服务器”、“客户端”其实就是通信的两个端,这里就有个疑惑,那他们之间有什么区别呢?
举个栗子:
栗子1:如果要求A单向上报数据给B,那么就需要B向A提供地址和端口号,这时候,我们就可把B端定义为服务器去写,A则定义为一个客户端~
栗子2:如果有10个用户都要向X上报信息,那么自然X就是哪个独一无二的服务器啦,10个是客户端~

百度百科里有几句摘过来:Socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的Socket系统调用。客户随机申请一个Socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个Socket号;服务器拥有全局公认的Socket,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。

依照上述理解的话,服务器和客户端更像是一个相对的概念~

注:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

socket类型

每个socket实现都至少提供了两种socket:流和数据报。
流socket(SOCK_STREAM):提供可靠的双向的字节流通信信道。数据的传输像在打通的管道中流过一样,也就不存在消息边界的概念,数据只要沿着连接好的管道送就可以了,因为流socket的工作需要一对相互连接的socket,因此流socket也被称为是面向连接的。这时候我们很容易想到课本里的“TCP(传输控制协议)”。对滴,流socket通常会采用TCP。
数据报socket(SOCK_DGRAM):这种传输不需要连接,消息边界得到了保留,但是数据传输是不可靠的。消息到达可能是无序的、重复的或者根本就无法到达。数据报socket采用的是用户数据报协议(UDP)。

知识与技术总是在不断进步,现在的socket已经布置有课本常见的UDP和TCP了。还有SCTP和DCCP,这是两个新的传输层协议,有可能以后会越来越普及~后面章节边学习边写一下

下一博客介绍一下三次握手和四次挥手的理解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值