Socket 编程
- 1. Socket简介
- 2. Socket分类
- 2.1. 有连接的客户/服务器时序图
- 2.2. 无连接的客户/服务器时序图
- 3. Socket常用函数
- 3.1. socket()函数
- 3.2. bind()函数
- 3.3. listen()和connect()函数
- 3.4. accept()函数
- 3.5. read()、write()等
- 3.6. close()操作
- 4. Linux的阻塞和非阻塞IO
- 5. Java Socket API
- 5.1. 示例
- 5.2. TCP套接字
- 5.2.1. ServerSocket类
- 5.2.2. Socket类
- 5.3. 套接字传输数据
- 5.3.1. 写入数据
- 5.3.2. 写出数据
- 6. TCP套接字编程示例
- 6.1. Java示例
- 7. UDP
- 7.1. DatagramSocket类
- 7.2. DatagramPacket类
- 7.3. UDP套接字编程示例
- 7.4. Java示例
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个字节的数据
- 返回值:
>00-
-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字节










