基于TCP和UDP的socket编程
程序员文章站
2022-04-08 21:38:52
...
文章目录
基于TCP和UDP的socket编程
TCP和UDP的socket编程区别
- 通常我们在说到网络编程时默认是指TCP编程,即用前面提到的socket函数创建一个socket用于TCP通讯,函数参数我们通常填为SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),这表示建立一个socket用于流式网络通讯。
- SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,也是双向的,即任何一方都可以收发数据,协议本身提供了一些保障机制保证它是可靠的、有序的,即每个包按照发送的顺序到达接收方。
- 而SOCK_DGRAM这种是User Datagram Protocol协议的网络通讯,它是无连接的,不可靠的,因为通讯双方发送数据后不知道对方是否已经收到数据,是否正常收到数据。任何一方建立一个socket以后就可以用sendto发送数据,也可以用recvfrom接收数据。根本不关心对方是否存在,是否发送了数据。它的特点是通讯速度比较快。大家都知道TCP是要经过三次握手的,而UDP没有。
基于TCP的socket编程
TCP编程的服务器端一般步骤是
- 创建一个socket,用函数socket();
- 设置socket属性,用函数setsockopt(); * 可选
- 绑定IP地址、端口等信息到socket上,用函数bind();
- 开启监听,用函数listen();
- 接收客户端上来的连接,用函数accept();
- 收发数据,用函数send()和recv(),或者read()和write();
- 关闭网络连接;
- 关闭监听;
TCP编程的客户端一般步骤是
- 创建一个socket,用函数socket();
- 设置socket属性,用函数setsockopt();* 可选
- 绑定IP地址、端口等信息到socket上,用函数bind();* 可选
- 设置要连接的对方的IP地址和端口等属性;
- 连接服务器,用函数connect();
- 收发数据,用函数send()和recv(),或者read()和write();
- 关闭网络连接;
TCP服务器/客户端代码
""" tcp服务器 """
# 创建socket
socket();
# 设置socket属性
setsocketopt();
# 绑定ip,端口
bind();
# 监听端口
listen();
# 接受请求
accept();
# 接收数据
recv();
""" tcp客户端 """
# 创建socket
socket();
# 设置socket属性
setsocketopt();
# 连接远程服务器
connect();
基于UDP的socket编程
UDP编程的服务器端一般步骤是
- 创建一个socket,用函数socket();
- 设置socket属性,用函数setsockopt();* 可选
- 绑定IP地址、端口等信息到socket上,用函数bind();
- 循环接收数据,用函数recvfrom();
- 关闭网络连接;
UDP编程的客户端一般步骤是
- 创建一个socket,用函数socket();
- 设置socket属性,用函数setsockopt();* 可选
- 绑定IP地址、端口等信息到socket上,用函数bind();* 可选
- 设置对方的IP地址和端口等属性;
- 发送数据,用函数sendto();
- 关闭网络连接;
UDP服务器/客户端代码
/* udp服务器 */
// 创建socket
socket();
// 设置socket属性
setsocketopt();
// 绑定ip,端口
bind();
// 接收数据
recvfrom();
/* udp客户端 */
// 创建socket
socket();
// 设置socket属性
setsocketopt();
// 发送数据
sendto();
上一篇: socket编程