创建套接字
服务端套接字
- 创建套接字
int socket(int domain, int type, int protocol);
serv_sock = socket(PF_INET, SOCK_STREAM, 0);
- 调用bind函数分配IP地址和端口
int bind(int sockfd, const struct sockaddr * myaddr, socklen_t addrlen);
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));
if (bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1) {
error_handling("bind() error");
}
- 调用listen转为可接收请求状态
int listen(int sockfd, int backlog);
if (listen(serv_sock, 5) == -1) {
error_handling("listen() error");
}
- 调用accept函数接受连接请求
int accept(int sockfd, struct sockaddr * addr, socklen_t * addrlen);
int clnt_sock;
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size;
clnt_addr_size = sizeof(clnt_addr);
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if (clnt_sock == -1) {
error_handling("accept() error");
}
客户端套接字
- 创建套接字
- 调用
connect
函数向服务端发送连接请求
int connect(int sockfd, const struct sockaddr * serv_addr, socklen_t addrlen);
struct sockaddr_in serv_addr;
sock = socket(PF_INET, SOCK_STREAM, 0);
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
serv_addr.sin_port = htons(atoi(argv[2]));
if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) {
error_handling("connect() error");
}