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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!