c,#include,#include,#include,#include,#include,#include,#include,,int main() {, int sockfd, newsockfd;, struct sockaddr_in serv_addr, cli_addr;, socklen_t clilen;, char buffer[256];,, sockfd = socket(AF_INET, SOCK_STREAM, 0);, bzero(&serv_addr, sizeof(serv_addr));, serv_addr.sin_family = AF_INET;, serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);, serv_addr.sin_port = htons(5001);,, bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));, listen(sockfd, 5);, clilen = sizeof(cli_addr);, newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);, bzero(buffer, 256);, read(newsockfd, buffer, 255);, printf("Message from client: %s,", buffer);, close(newsockfd);, close(sockfd);, return 0;,},
``Linux网络编程是使用C语言或其他编程语言在Linux操作系统上进行网络通信的过程,它涉及到套接字(socket)编程,用于实现客户端和服务器之间的数据传输,下面是一个简单的Linux网络编程实例,展示了如何创建一个TCP服务器和一个TCP客户端。
TCP服务器示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int server_fd, new_socket; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[1024] = {0}; const 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(8080); // 绑定套接字到端口 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); } printf("Server is listening on port 8080...\n"); // 接受客户端连接请求 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) { perror("accept"); exit(EXIT_FAILURE); } // 读取客户端发送的数据并回复 read(new_socket, buffer, 1024); printf("Client message: %s\n", buffer); send(new_socket, hello, strlen(hello), 0); printf("Hello message sent\n"); return 0; }
TCP客户端示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> int main() { int sock = 0; struct sockaddr_in serv_addr; char buffer[1024] = {0}; const char *hello = "Hello from client"; // 创建套接字 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); exit(EXIT_FAILURE); } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(8080); // 将地址转换为二进制格式 if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) { perror("inet_pton"); exit(EXIT_FAILURE); } // 连接到服务器 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { perror("connect"); exit(EXIT_FAILURE); } // 发送消息给服务器 send(sock, hello, strlen(hello), 0); printf("Message sent\n"); // 接收服务器的回复 read(sock, buffer, 1024); printf("Server reply: %s\n", buffer); return 0; }
这两个示例分别展示了一个TCP服务器和一个TCP客户端的基本操作,服务器监听指定的端口,等待客户端连接,然后与客户端进行数据交换,客户端连接到服务器后,发送一条消息并接收服务器的回复。
问题1: Linux网络编程中,什么是套接字?为什么我们需要它?
答案1: 套接字(socket)是一种进程间通信机制,用于在不同计算机之间或同一计算机上的不同进程之间传输数据,它是网络编程的基础,提供了一种统一的接口来处理不同类型的网络协议(如TCP、UDP等),通过套接字,我们可以在不同的应用程序之间建立连接并进行双向通信。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/570375.html