TCP客户端和服务器编程离不开基本的套接字函数,学习TCP基本套接字很重要,下面学习一下基本的套接字接口,并实现一个简单的客户端和服务器程序。
socket函数
为了执行网络IO,一个进程要做的第一件事情就是要创建套接字。
在这里插入代码片
#include <sys/socket.h>
int socket(int family, int type, int protocol)
返回:成功返回非负描述符,失败返回-1
family:
AF_INET->IPV4协议
AF_INET6->IPV6协议
AF_LOCAL->uinx域协议
AF_ROUTE->路由套接字协议
type:
SOCK_STREAM->字节流套接字
SOCK_DGRAM->数据报套接字
SOCK_RAM->原始套接字
protocal:
IPPROTO_CP->TCP传输协议
IPPROTO_UDP->UDP传输协议
IPPROTO_SCTP->SCTP传输协议
connect函数
TCP客户端通过connect函数将来建立与TCP服务器的连接
在这里插入代码片
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *seraddr, socklen_t addrlen)
connect会触发三次握手。
bind函数
bind函数把一个本地协议地址赋予一个套接字。
在这里插入代码片
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen)
bind函数可以指定一个端口号和ip,也可以都不指定。
listen函数
listen函数仅有TCP服务器调用
内核会为任何一个给定的套接字维护两个队列:
1.未完成连接队列,已有客户端发起并到达服务器,而服务器并未完成相应的TCP三路握手的过程,此时这些套接字处于SYN_READ状态。
2.已完成连接队列,完成三次握手的,套接字处于ESTABLISHED。
在这里插入代码片
#include <sys/socket.h>