马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
案例
案例一
server.c
[code]#include // 标准输入输出#include //提供通用的工具函数,例如内存分配和程序退出。#include //提供字符串处置惩罚函数。#include //提供对 POSIX 操作系统 API 的访问,包罗对文件描述符的操作。#include //提供与 Internet 地点转换相干的函数和数据结构。#define PORT 8082 //PORT 是服务器监听的端口号,设置为 8082。#define BUFFER_SIZE 1024 //界说了缓冲区的大小,用于接收数据,设置为 1024 字节。int main(){ int server_fd; //用于存储服务器套接字的文件描述符 int new_socket; //客户端毗连的套接字描述符 struct sockaddr_in address; //sockaddr_in 结构体,表示服务器的地点信息。 int opt = 1; //用于设置套接字选项(端口重用)。 int addrlen = sizeof(address); //服务器地点结构的大小。 char buffer[BUFFER_SIZE] = {0}; //用于接收客户端发送的消息,并初始化为零。 /*利用 socket 函数创建一个套接字。参数 AF_INET 指定利用 IPv4,SOCK_STREAM 表示利用 TCP 协议。 *如果创建失败,函数返回值为 -1,输出错误信息并退出程序。*/ if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("server create failed\n"); exit(EXIT_FAILURE); } /*利用 setsockopt 函数允许套接字重用地点。 *设置选项 SO_REUSEADDR,这使得即使在套接字关闭后,新的套接字也可以绑定到同一端口。 *如果设置选项失败,输出错误信息并退出程序。*/ if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } // 配置服务器地点结构 address.sin_family = AF_INET; //设置 address 的地点家族为 AF_INET,表示 IPv4。 // address.sin_addr.s_addr = INADDR_ANY; //利用 INADDR_ANY,表示服务器将监听全部可用的网络接口。 /*将字符串格式的 IP 地点("127.0.0.1")转换为二进制格式并存储在 serv_addr.sin_addr 中。这个IP地点指的是本机。*/ if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) |