socket:创建一个socket
bind:用于绑定IP地址和端口号到socket
connect: 该函数用于绑定之后的client端与服务器建立连接
listen: 设置能处理的最大连接要求,Listen()并未开始接收连线,只是设置socket为listen模式。
accept:用来接受socket连接。
int socket(int family, int type, int protocol);
socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1
对于IPv4,family参数指定为AF_INET
对于TCP协议,type参数指定SOCK_STREAM
int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接,因此服务器需要调用bind绑定一个固定的网络地址和端口号.bind()成功返回0,失败返回-1。
int listen(int s,int backlog);
listen()用来等待参数s的socket连线。参数backlog指定同时能处理的最大连接要求。
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);
三方插手完成后,服务器调用accept()接受连接,如果服务器调用accept()时还没有客户端的连接请求,就阻塞等待直到有客户端连接上来,cliaddr是一个传出参数,accept()返回时传出客户端的地址和端口号.
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
客户端需要调用connect()连接服务器,connect和bind的参数形式一致,区别在于bind的参数是自己的地址,而connect的参数是对方的地址.
服务端代码:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>