网络编程离不开socket,小猿圈这篇详解一下socket创建,仔细学完这篇对你认识网络底层的东西有着很重要的作用,同时即便有已经写好的模块用,但是这个东西一定要掌握的,大家一定要认真看。
TCP通信
一个程序使用套接字需要执行4个步骤。
--分配套接口和初始化
--连接
--发送或接收数据
--关闭套接字
涉及到的调用包括socket、bind、listen、connect(阻塞线程)、accept(阻塞线程)、recv(阻塞线程)、send(阻塞线程)。
分配套接口和初始化
--我们需要做的第一件工作就是分配套接口。
--套接口可以看作是文件描述符
--不论server端,还是client端,第一步都是一样的
每个套接口都是一个通信的通道
两个进程通过套接口建立连接后就可以发送和接收数据了。
socket()
int socket(int domain.int tyoe,int protocol);
系统调用socket带有以下参数
--int domain
--int tyoe
--int protocol(这个值一般都取0)
--成功返回套接字描述符,失败返回-1,并设置errno
socket参数
domain说明
AF_UNIX UNIX内部使用
AF_INET TCP/IP协议
AF_ISO 国际标准组织协议
AF_NS Xerox网络协议
type说明
SOCK_STREAM 使用TCP可靠连接
SOCK_DGRAM 使用UDP不可靠连接
bind()函数
int bind(int sockfd,const struct sockaddr *my_addr,socklen_t addrlen);
bind将进程和一个套接口联系起来,bind通常用于服务器进程为接入客户连接建立一个套接口(简单而言,就是把程序和一个IP地址端口号绑定在一起)。
参数sockfd是函数socket调用返回的套接口。