基于Linux的socket多线程通信(使用Linux Socket进行多线程通信)

基于Linux的Socket多线程通信是指在Linux系统中使用套接字(socket)进行通信,同时利用多线程技术来处理多个客户端连接。

以下是一个使用多线程的简单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 <arpa/inet.h> #include <pthread.h> #include <errno.h> #define PORT 8080 #define BUFFER_SIZE 1024 void *client_handler(void *arg); int main() { int listener, conn; struct sockaddr_in addr; socklen_t addrlen = sizeof(struct sockaddr_in); listener = socket(AF_INET, SOCK_STREAM, 0); if (listener < 0) { perror("socket"); exit(1); } addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); exit(1); } if (listen(listener, 10) < 0) { perror("listen"); exit(1); } printf("Server is listening on port %d...\n", PORT); while (1) { conn = accept(listener, (struct sockaddr *)&addr, &addrlen); if (conn < 0) { perror("accept"); exit(1); } printf("Accepted connection from %s:%d\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); pthread_t thread_id; if (pthread_create(&thread_id, NULL, client_handler, (void *)&conn) < 0) { perror("pthread_create"); exit(1); } } close(listener); return 0; } void *client_handler(void *arg) { int conn = *(int *)arg; char buffer[BUFFER_SIZE]; ssize_t n; while ((n = read(conn, buffer, BUFFER_SIZE)) > 0) { write(conn, buffer, n); } if (n < 0) { perror("read"); } printf("Closing connection...\n"); close(conn); return NULL; }

在这个示例中,我们创建了一个TCP回显服务器,它在监听端口8080。

当收到客户端的连接请求时,服务器会接受这个连接并创建一个新线程来处理与客户端的通信。

线程函数client_handler负责处理客户端发送的数据,读取数据并将其回显给客户端。

当客户端关闭连接或发生错误时,服务器将关闭相应的套接字。

阅读剩余
THE END