Socket 理解
Socket到底是什么?
对Socket通信的一些简单理解
Socket就是TCP/IP协议的编程模型,通过一系列API来访问操作系统的网络协议栈,从而建立TCP连接,发送或接收数据。
可以先看下OSI七层参考模型,同时对照着看下tcp/ip协议模型。然后了解下socket的由来,和tcp/ip协议族的关系。然后详细学习下socket编程模型,包括服务器端和客户端的,模型其中用到的每个函数和参数都要弄明白是什么意思,再结合具体的例子实验一下。这样对socket就有了初级的理解了,然后可以深入研究一些较高级问题了
传统意义上是类似于文件描述符的存在形式,是一种抽象的资源定位,即进程端口资源。
- 一个程序启动后,有pid文件标识锁定该运行的程序。
- 一个文件打开后,在进程中有一个fd标识着它。
- 一个进程占用了一个端口,并建立相关协议的通信,由socket标识着它。
所以socket是什么,就是一个资源标识,是一个三元组(协议,端口号,IP地址)。基于socket的编程,指的是在该资源(三元组)的基础上,封装对数据的处理。就好比打开一个文件后,对文件的编程,如函数f.Close()。
socket编程必备的函数如下:
- Socket():创建一个socket。Bind():绑定地址,即该socket负责哪个资源。
- Listen():开始监听。Accept():接收请求。
- Connect():建立连接
- Recv()/Send():数据发送和接收
- 客户端->建立socket->Connect()建立连接->Close()。
- 服务端->建立socket->Bind()->Listen()->Accept()接收请求->Close()。
- TCP的三次握手就是发生在【Connect】和【Accept】之间。数据处理交由Recv()/Send()
socket编程就是使用socket api进行网络编程。
socket就是一套用于网络通信的api。
就像printf, scanf这一类api进行输入输出的编程;strlen,strcpy这一类用于字符串处理。socket就是用于网络通信。你把它理解成类似的东西就行。
socket的难点并不在于socket接口自身。而是网络通信固有的复杂性。所以要理解socket编程,就要把socket接口与网络通信本身结合起来。首先要会socket的套路:bind/accept,connect,send/recv等等。然后了解和实践各种网络编程模型。
本作品采用《CC 协议》,转载必须注明作者和本文链接