2020-计算机网络-Tec03-Socket
Socket 编程
1. Socket简介
- 不在一个主机上,通过socket来满足需求,封装不同网络主机的请求
- 处理不同的细节存在一定的难度,Socket我们可以屏蔽一些底层设计。
2. Socket分类
- 流套接字:可靠
- 数据报套接字:广播、简单
- 原始套接字:保证IP完整性
2.1. 有连接的客户/服务器时序图
- 客户端一般是发起方
2.2. 无连接的客户/服务器时序图
- 动作一致
3. Socket常用函数
- 这里的函数使用C作为演示。
3.1. socket()函数
- 协议簇:指定具体的协议
- socket类型:
- protocol协议:具体用什么协议
- type和protocol是必须对应的
- 返回一个描述符(在协议空间,但没有绑定IP地址)
3.2. bind()函数
3.3. listen()和connect()函数
3.4. accept()函数
- 空指针作为返回的协议地址(因为不知道是谁来进行请求的)
3.5. read()、write()等
3.6. close()操作
4. Linux的阻塞和非阻塞IO
- 文件描述符fd:是进程中文件的唯一索引
- 套接字默认是阻塞模式,我在写别人不能写(修改阻塞态)
- count个字节的数据
- 返回值:
>0
0
-1
:错误码进入errno
- 阻塞模式:如果建立连接后则长时间占用文件,而非阻塞模式则会返回-1,判断EAGAIN
- 使用read调用来读取指定长度的数据(阻塞模式)
- nread表示不是很重要的错误
- 返回读了多少
- bufp:下次开始读是从哪里开始读
- 使用read调用来读取指定长度的数据(非阻塞模式)
5. Java Socket API
5.1. 示例
5.2. TCP套接字
- Socket和ServerSocket
5.2.1. ServerSocket类
5.2.2. Socket类
- 主动连接;Socket
5.3. 套接字传输数据
5.3.1. 写入数据
5.3.2. 写出数据
6. TCP套接字编程示例
6.1. Java示例
- Java进行了比较好的封装
7. UDP
7.1. DatagramSocket类
7.2. DatagramPacket类
7.3. UDP套接字编程示例
7.4. Java示例
- 数据报最大1024字节
2020-计算机网络-Tec03-Socket
https://spricoder.github.io/2020/07/05/2020-Internet-computing/2020-Internet-computing-Tec03-Socket/