C语言实现SOCKET编程
以下是一个简单的C语言示例,演示了如何使用socket编程创建一个简单的服务器和客户端。在此示例中,服务器将侦听来自客户端的消息并将其原样发送回去。
// 服务器端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #define PORT 8080 int main(int argc, char *argv[]) { int server_fd, new_socket, valread; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[1024] = {0}; char *hello = "Hello from server"; // 创建套接字文件描述符 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 设置套接字选项,允许多个连接复用同一端口 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons( PORT ); // 将套接字绑定到指定IP和端口 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } // 开始监听连接请求 if (listen(server_fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } // 接受并处理客户端连接 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept"); exit(EXIT_FAILURE); } // 从客户端读取数据 valread = read( new_socket , buffer, 1024); printf("%s\n",buffer); // 向客户端发送响应消息 send(new_socket , hello , strlen(hello) , 0 ); printf("Hello message sent\n"); return 0; }
// 客户端 #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #define PORT 8080 int main(int argc, char *argv[]) { int sock = 0, valread; struct sockaddr_in serv_addr; char *hello = "Hello from client"; char buffer[1024] = {0}; // 创建套接字 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("\n Socket creation error \n"); return -1; } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(PORT); // 将IPv4地址从点分十进制转换为二进制格式 if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) { printf("\nInvalid address/ Address not supported \n"); return -1; } // 连接到服务器 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf("\nConnection Failed \n"); return -1; } // 向服务器发送消息 send(sock , hello , strlen(hello) , 0 ); printf("Hello message sent\n"); // 从服务器接收响应 valread = read( sock , buffer, 1024); printf("%s\n",buffer ); return 0; }
要编译和运行这两个文件,您可以使用以下命令:
# 编译服务器端程序 gcc server.c -o server # 编译客户端程序 gcc client.c -o client # 运行服务器端程序 ./server # 在另一个终端窗口中运行客户端程序 ./client
此示例将在本地主机上创建一个简单的TCP连接。客户端将向服务器发送"Hello from client"消息,然后服务器将收到该消息并发送"Hello from server"。
阅读剩余
THE END