Linux网络编程——TCP编程

发布于:2023-01-22 ⋅ 阅读:(10) ⋅ 点赞:(0) ⋅ 评论:(0)


前言

tcp编程的实现流程:
在这里插入图片描述


tcp编程相关函数

1、socket函数

功能:创建套接字并返回套接字描述符

头文件:
#include<sys/socket.h>
函数原型:
int socket(int family,int type,int protocol)
参数:
family:协议族
		AF_INET:IPv4协议
		AF_INET6:IPv6协议
type:套接字类型
		SOCK_STREAM:流式套接字(tcp)
		SOCK_DGRAM:数据报套接字(udp)
protocol:0
返回值:
非负套接字描述符

2、bind函数

功能:将套接字与IP地址和端口号绑定

头文件:
#include<sys/socket.h>
函数原型:
int bind(int sockfd,(struct sockaddr *)my_addr,int addrlen)
参数:
sockfd:套接字描述符
my_addr:绑定的地址
addrlen:地址长度

有关sockaddr和sockaddr_in结构体的知识——[转]socket编程——sockaddr_in结构体操作

3、listen函数

功能:设置监听模式和连接端口数量

头文件:
#include<sys/socket.h>
函数原型:
int listen(int sockfd,int backlog)
参数:
sockfd:套接字描述符
backlog:请求队列中允许的最大请求数

4、accept函数

功能:等待并接收客户端的请求

头文件:
#include<sys/socket.h>
函数原型:
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen)
参数:
sockfd:套接字描述符
addr:用于保存客户端地址
addrlen:addr长度变量的地址
返回值:
建立好连接的套接字描述符

5、connect函数

功能:客户端发送连接请求

头文件:
#include<sys/socket.h>
函数原型:
int connect(int sockfd,struct sockaddr *serv_addr,int addrlen)
参数:
sockfd:套接字描述符
addr:服务器端地址
addrlen:地址长度

6、send函数

功能:发送数据

头文件:
#include<sys/socket.h>
函数原型:
int send(int sockfd,const void *buf,int len,int flags)
参数:
sockfd:套接字描述符
buf:发送缓存区的地址
len:发送数据的长度
flags:一般为0
返回值:
实际发送的字节数

7、recv函数

功能:接收数据

头文件:
#include<sys/socket.h>
函数原型:
int recv(int sockfd,void *buf,int len,unsigned int flags)
参数:
sockfd:套接字描述符
buf:存放接收数据的缓存区的地址
len:接收数据的长度
flags:一般为0
返回值:
实际接收的字节数

8、close函数

功能:关闭套接字

头文件:
#include<sys/socket.h>
函数原型:
int close(int sockfd)
参数:
sockfd:套接字描述符

总结

tcp和udp的区别:

TCP面向连接 UDP是无连接 的,即发送数据之前不需要建立连接
TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达 UDP尽最大努力交付,即不保证可靠交付
Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制 UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信
每一条TCP连接只能是点到点的 UDP支持一对一,一对多,多对一和多对多的交互通信
TCP对系统资源要求较多 UDP对系统资源要求较少

网站公告

欢迎关注微信公众号

今日签到

点亮在社区的每一天
签到