IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络学习笔记(4)---Socket编程 -> 正文阅读

[网络协议]计算机网络学习笔记(4)---Socket编程

目录

1 Socket编程-应用编程接口(API)

?2 Socket编程-客户端/服务端软件设计


1 Socket编程-应用编程接口(API)

1.1 网络程序设计接口

?1.2 应用编程接口API(Application Programming Interface)

1.3 几种典型的应用编程接口?

?

?1.4 Socket API

?

?1.5 Socket 抽象---类似于文件的抽象

当应用进程创建套接字时,操作系统分配一个数据结构存储该套接字相关信息;

地址结构:已定义结构sockaddr_in?

?

?使用TCP/IP协议簇的网络应用程序声明端点地址变量时,使用结构sockaddr_in

?1.6 Scoket编程-Socket API函数

?

?(1)WSAStartup---使用Socket应用程序在使用Socket之前必须首先调用

?(2)WSACleanup---在完成对请求的Socket库的使用后,最后要调用WSAClenup函数

?

?(3)socket---创建套接字socket

(4)Closesocket---关闭一个描述符为sd的套接字socket

(5)bind?---绑定套接字的本地端点地址(IP地址+端口号)

?

?(6)listen---设置服务器端的流套接字处于监听状态---只用于服务端

?(7)connect---只用于客户端

(8)accept?---创建新的套接字socket,以提供并发服务

?(9)send、sendto---发送数据

?

?(10)recv、recvfrom---接收数据

?

?(11)setsockpt、getsockopt---套接字参数的设置及读取

?

总结:Scoket API函数小结?

?

?

?1.7 Socket面向TCP/IP的服务类型

?(1)TCP:可靠、面向连接、字节流传输、点对点;

?(2)UDP:不可靠、无连接、数据报传输;

1.8 网络字节顺序

(1)TCP/IP定义了标准的用于协议头中的二进制整数表示:网络字节顺序(network byte order)

(2)某些Socket API函数的参数需要存储为网络字节顺序(如IP地址、端口号等)

(3)可以实现本地字节顺序与网络字节顺序间转换的函数

1.9 网络应用的Socket API(TCP)调用基本流程?

?

?2 Socket编程-客户端/服务端软件设计

?2.1 解析服务器IP地址

(1)客户端可能使用域名(如study.163.com)或IP地址(如:123.58.180.21)标识服务器;

(2)IP协议需要使用32位二进制IP地址;

(3)需要将域名或点分十进制IP地址转换为32位IP地址;

?2.2 解析服务器(熟知)端口号

(1)客户端还可能使用服务名(如HTTP)标识服务器端口;

(2)需要将服务名转换为熟知端口号;函数getservbyname();返回一个指向结构servent的指针

?2.3 解析协议号

(1)客户端可能使用协议名(如:TCP)制定协议;

(2)需要将协议名转换为协议号(如:6);函数getprotobyname()实现协议名到协议号的转换;

返回一个指向结构protoent的指针;

?2.4 TCP客户端软件流程

?

2.5 UDP客户端软件流程?

?

?2.6 Socket编程-服务器软件设计

2.6.1?四种类型基本服务器

(1)循环无连接(Iterative connectionless)服务器;

(2)循环面向连接(Iterative connection-oriented)服务器;

(3)并发无连接(Concurrent connectionless)服务器;

(4)并发面向连接(Concurrent connection-oriented)服务器;

2.6.2 循环无连接服务器基本流程

(1)创建套接字;

(2)绑定端点地址(INADDR_ANY+端口号);

(3)反复接收来自客户端的请求;

(4)遵循应用层协议,构造响应报文,发送给客户;

1、数据发送:?

(1)服务端不能使用connect()函数;(2)无连接服务器使用sedto()函数发送数据报;

?socket:服务器(UDP)套接字;data:(指针-存储待发送数据缓存的地址);length:(缓存中数据字节数);flags:(调试或控制选项,一般置零);destaddr:(指向结构sockaddr_in)的指针(客户端端点地址);addrlen:地址结构长度;

2、获取客户端点地址

调用recvfrom()函数接收数据时,自动提取;

?socket:(UDP)服务器套接字;buf:存放数据报的缓存地址;length:缓存可用空间;flags:调试或控制选项;from:存放源地址的缓存地址,客户端的端点地址;fromlen:源地址长度;

2.6.3 循环面向连接服务器基本流程

(1)创建(主)套接字,并绑定熟知端口号;

(2)设置(主)套接字为被动监听模式,准备用于服务器;

(3)调用accept()函数接收下一个连接请求(通过主套接字),创建新套接字与该客户建立连接;

(4)遵循应用协议,反复接收客户端请求,构造并发送响应(通过新套接字);

(5)完成为特定客户服务后,关闭与该客户之间的连接,返回步骤3;

2.6.4 并发无连接服务器基本流程

主线程1:创建套接字,并绑定熟知端口号;

主线程2:反复调用recvfrom()函数,接收下一个客户请求,并创建心线程处理该客户响应;

子线程1:接受一个特定请求;

子线程2:依据应用层协议构造响应报文,并调用sedto()发送;

子线程3:退出(一个子线程处理一个请求后即终止);

2.6.5 并发面向连接服务器基本流程

主线程1:创建(主)套接字,并绑定熟知端口号;

主线程2:设置(主)套接字为被动监听模式,准备用于服务器;

主线程3:反复调用accept()函数接收下一个连接请求(通过主套接字),并创建一个新的子线程处理该客户响应;

子线程1:接收一个客户的服务请求(通过新创建的套接字);

子线程2:遵循应用层协议与特定客户进行交互;

子线程3:关闭/释放连接并退出(线程终止);

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 12:13:42  更:2021-08-27 12:15:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:49:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码