C 為伺服器端套接字提供建立和管理功能,包括透過socket()建立套接字,透過bind()綁定位址和端口,以及透過listen()監聽連接。一旦建立,可使用accept()接受連接,send()/recv()發送/接收數據,最後透過close()關閉套接字。
C 函數如何在網路程式設計中建立和管理伺服器端套接字
網路程式設計中,伺服器端套接字是進程與客戶端通訊的關鍵。 C 為開發網路應用程式提供了豐富的函數,可用於在伺服器端建立和管理套接字。
建立伺服器端套接字
要建立伺服器端套接字,需要呼叫下列步驟:
socket()
函數建立一個套接字。 bind()
函數將套接字與一個位址和連接埠號碼綁定。 listen()
函數使套接字處於監聽狀態。 #include <iostream> #include <sys/socket.h> #include <netinet/in.h> int main() { // 创建套接字 int server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd == -1) { std::cerr << "socket() failed" << std::endl; return -1; } // 绑定套接字 struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); int bind_result = bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)); if (bind_result == -1) { std::cerr << "bind() failed" << std::endl; return -1; } // 监听套接字 int listen_result = listen(server_fd, 5); if (listen_result == -1) { std::cerr << "listen() failed" << std::endl; return -1; } // ... // 处理客户端连接的代码 }
管理伺服器端套接字
一旦套接字建立,可以將其用於與客戶端進行通訊。以下是如何管理伺服器端套接字的幾個主要方法:
accept()
函數接受來自客戶端的連線。 send()
和 recv()
函數傳送和接收資料。 close()
函數關閉套接字。 實戰案例:TCP 伺服器
#以下是一個簡單的C TCP 伺服器範例,示範如何建立和管理伺服器端套接字:
#include <iostream> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> // for close() int main() { // 创建套接字 int server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd == -1) { std::cerr << "socket() failed" << std::endl; return -1; } // 绑定套接字 struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); int bind_result = bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)); if (bind_result == -1) { std::cerr << "bind() failed" << std::endl; return -1; } // 监听套接字 int listen_result = listen(server_fd, 5); if (listen_result == -1) { std::cerr << "listen() failed" << std::endl; return -1; } // 接受客户端连接 int client_fd; while ((client_fd = accept(server_fd, (struct sockaddr *) NULL, NULL)) != -1) { // 为客户端创建子进程进行处理 if (fork() == 0) { // ... // 处理客户端连接的代码 close(client_fd); exit(0); } } // 关闭套接字 close(server_fd); return 0; }
以上是C++ 函式在網路程式設計中如何建立和管理伺服器端套接字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!