中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

網(wǎng)站類型分類有哪些電商網(wǎng)站建設(shè) 網(wǎng)站定制開發(fā)

網(wǎng)站類型分類有哪些,電商網(wǎng)站建設(shè) 網(wǎng)站定制開發(fā),做網(wǎng)站需要什么證明嘛,泰安網(wǎng)絡(luò)安全培訓(xùn)一、引言 在網(wǎng)絡(luò)編程的領(lǐng)域中,TCP(Transmission Control Protocol)協(xié)議因其可靠的數(shù)據(jù)傳輸特性而被廣泛應(yīng)用。在 Linux 環(huán)境下,使用 C 或 C 進行 TCP 編程可以實現(xiàn)各種強大的網(wǎng)絡(luò)應(yīng)用。本文將深入探討 Linux TCP 編程的各個方面&…

一、引言

在網(wǎng)絡(luò)編程的領(lǐng)域中,TCP(Transmission Control Protocol)協(xié)議因其可靠的數(shù)據(jù)傳輸特性而被廣泛應(yīng)用。在 Linux 環(huán)境下,使用 C 或 C++ 進行 TCP 編程可以實現(xiàn)各種強大的網(wǎng)絡(luò)應(yīng)用。本文將深入探討 Linux TCP 編程的各個方面,包括 API 接口的詳細說明、TCP Server 和 TCP Client 的實例代碼,以及完整的測試流程。

二、TCP 編程的 API 接口說明

(一)socket() 函數(shù)

int socket(int domain, int type, int protocol);
  • 功能:創(chuàng)建一個套接字。
  • 參數(shù):
    • domain:指定協(xié)議族,常見的有 AF_INET(IPv4 網(wǎng)絡(luò)協(xié)議)和 AF_INET6(IPv6 網(wǎng)絡(luò)協(xié)議)。
    • type:套接字類型,對于 TCP 通常使用 SOCK_STREAM
    • protocol:指定使用的具體協(xié)議,通常設(shè)置為 0 以使用默認的 TCP 協(xié)議。
  • 返回值:成功時返回一個非負的套接字描述符,失敗時返回 -1。

(二)bind() 函數(shù)

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 功能:將套接字與本地地址和端口綁定。
  • 參數(shù):
    • sockfd:由 socket() 函數(shù)返回的套接字描述符。
    • addr:指向包含地址和端口信息的結(jié)構(gòu)體,如 struct sockaddr_in(IPv4)或 struct sockaddr_in6(IPv6)。
    • addrlenaddr 結(jié)構(gòu)體的長度。
  • 返回值:成功返回 0,失敗返回 -1。

(三)listen() 函數(shù)

int listen(int sockfd, int backlog);
  • 功能:將套接字設(shè)置為監(jiān)聽狀態(tài),準備接受客戶端的連接請求。
  • 參數(shù):
    • sockfd:已綁定的套接字描述符。
    • backlog:指定等待連接隊列的最大長度。
  • 返回值:成功返回 0,失敗返回 -1。

(四)accept() 函數(shù)

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
  • 功能:從已完成連接隊列中取出一個連接,并創(chuàng)建一個新的套接字與客戶端進行通信。
  • 參數(shù):
    • sockfd:監(jiān)聽套接字描述符。
    • addr:用于存儲客戶端的地址信息。
    • addrlen:用于指定 addr 結(jié)構(gòu)體的長度。
  • 返回值:成功返回一個新的套接字描述符用于與客戶端通信,失敗返回 -1。

(五)connect() 函數(shù)(客戶端使用)

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 功能:客戶端向服務(wù)器發(fā)起連接請求。
  • 參數(shù):
    • sockfd:套接字描述符。
    • addr:指向服務(wù)器的地址結(jié)構(gòu)體。
    • addrlenaddr 結(jié)構(gòu)體的長度。
  • 返回值:成功返回 0,失敗返回 -1。

(六)send()recv() 函數(shù)

send() 函數(shù)
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • 功能:用于發(fā)送數(shù)據(jù)。
  • 參數(shù):
    • sockfd:套接字描述符。
    • buf:指向要發(fā)送數(shù)據(jù)的緩沖區(qū)。
    • len:要發(fā)送的數(shù)據(jù)長度。
    • flags:控制選項,通常設(shè)置為 0。
  • 返回值:成功返回實際發(fā)送的字節(jié)數(shù),失敗返回 -1。
recv() 函數(shù)
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  • 功能:用于接收數(shù)據(jù)。
  • 參數(shù):
    • sockfd:套接字描述符。
    • buf:用于存儲接收數(shù)據(jù)的緩沖區(qū)。
    • len:緩沖區(qū)的長度。
    • flags:控制選項,通常設(shè)置為 0。
  • 返回值:成功返回實際接收的字節(jié)數(shù),失敗返回 -1。

(七)close() 函數(shù)

int close(int fd);
  • 功能:關(guān)閉套接字。
  • 參數(shù):要關(guān)閉的套接字描述符。

三、TCP Server 實例代碼(支持多線程和回顯)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>#define MAX_CONNECTIONS 10  // 最大連接數(shù)量pthread_mutex_t connectionCountMutex;
int connectionCount = 0;  // 記錄當前連接數(shù)void *handle_client(void *arg) {int client_fd = *((int *)arg);char buffer[1024];int bytes_read;while ((bytes_read = recv(client_fd, buffer, sizeof(buffer), 0)) > 0) {// 回顯接收到的數(shù)據(jù)send(client_fd, buffer, bytes_read, 0);}// 處理客戶端斷開連接pthread_mutex_lock(&connectionCountMutex);connectionCount--;printf("Client disconnected. Current connections: %d\n", connectionCount);pthread_mutex_unlock(&connectionCountMutex);close(client_fd);pthread_exit(NULL);
}int main() {int server_fd, new_socket;struct sockaddr_in address;int addrlen = sizeof(address);int port = 8080;  // 服務(wù)器監(jiān)聽的端口// 創(chuàng)建套接字if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}// 初始化地址結(jié)構(gòu)體address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(port);// 綁定套接字到本地地址和端口if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {perror("Bind failed");exit(EXIT_FAILURE);}// 開始監(jiān)聽if (listen(server_fd, MAX_CONNECTIONS) < 0) {perror("Listen failed");exit(EXIT_FAILURE);}printf("Server is listening on port %d...\n", port);pthread_mutex_init(&connectionCountMutex, NULL);while (1) {// 接受客戶端連接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen)) < 0) {perror("Accept failed");exit(EXIT_FAILURE);}printf("New connection accepted. Current connections: %d\n", ++connectionCount);// 檢查連接數(shù)是否達到上限if (connectionCount > MAX_CONNECTIONS) {printf("Reached maximum connections. Closing new connection.\n");close(new_socket);connectionCount--;continue;}pthread_t thread;if (pthread_create(&thread, NULL, handle_client, &new_socket)!= 0) {perror("Thread creation failed");close(new_socket);connectionCount--;continue;}// 分離線程,使其資源在結(jié)束時自動回收pthread_detach(thread);}// 清理pthread_mutex_destroy(&connectionCountMutex);// 關(guān)閉服務(wù)器套接字close(server_fd);return 0;
}

四、TCP Client 實例代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>int main(int argc, char *argv[]) {if (argc!= 3) {printf("Usage: %s <server_ip> <port>\n", argv[0]);return 1;}int sock = 0;struct sockaddr_in serv_addr;char buffer[1024] = {0};int port = atoi(argv[2]);  // 將命令行參數(shù)轉(zhuǎn)換為端口號char *server_ip = argv[1];  // 服務(wù)器 IP 地址// 創(chuàng)建套接字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);// 將服務(wù)器 IP 地址從字符串轉(zhuǎn)換為網(wǎng)絡(luò)地址格式if (inet_pton(AF_INET, server_ip, &serv_addr.sin_addr) <= 0) {printf("\nInvalid address/ Address not supported \n");return -1;}// 連接到服務(wù)器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {printf("\nConnection Failed \n");return -1;}printf("Connected to server\n");while (1) {printf("Enter message: ");fgets(buffer, sizeof(buffer), stdin);// 發(fā)送數(shù)據(jù)send(sock, buffer, strlen(buffer), 0);// 接收服務(wù)器響應(yīng)int valread = recv(sock, buffer, 1024, 0);if (valread <= 0) {printf("Server disconnected\n");break;}printf("Received: %s", buffer);}// 關(guān)閉套接字close(sock);return 0;
}

五、測試驗證

使用 GCC 編譯器編譯服務(wù)器程序:

gcc server.c -o server -lpthread
./server

同樣使用 GCC 編譯器編譯客戶端程序:

gcc client.c -o client
  1. 運行客戶端程序,并傳入服務(wù)器的 IP 地址和端口作為參數(shù),例如:
./client 127.0.0.1 8080

在這里插入圖片描述

http://www.risenshineclean.com/news/8806.html

相關(guān)文章:

  • 長春網(wǎng)絡(luò)營銷外包泰州seo推廣
  • 網(wǎng)站節(jié)日制作快速網(wǎng)站輕松排名
  • 社交網(wǎng)站開發(fā)語言俄羅斯引擎搜索
  • 網(wǎng)站交換鏈接怎么做百度競價個人開戶
  • 網(wǎng)站代理什么意思百度seo排名優(yōu)化助手
  • 在合肥做網(wǎng)站多少錢千川推廣官網(wǎng)
  • 做網(wǎng)站需要云數(shù)據(jù)庫嗎2345網(wǎng)址導(dǎo)航手機版
  • 上海網(wǎng)站建設(shè)與設(shè)計公司好百度手機網(wǎng)頁版入口
  • 小說網(wǎng)站架構(gòu)win10優(yōu)化工具下載
  • 深圳福田做網(wǎng)站百度推廣開戶需要多少錢
  • 網(wǎng)站開發(fā)網(wǎng)站開發(fā)拼多多怎么查商品排名
  • 成品網(wǎng)站 免費網(wǎng)絡(luò)推廣的基本方法有哪些
  • 通江網(wǎng)站建設(shè)國際最新新聞熱點事件
  • 教育行業(yè)網(wǎng)站建設(shè)價格培訓(xùn)方案
  • 打造公司的網(wǎng)站互聯(lián)網(wǎng)推廣是干什么的
  • 北京做網(wǎng)站好的關(guān)鍵詞熱度分析
  • 網(wǎng)絡(luò)公司給別人做網(wǎng)站的cms是買的授權(quán)么自媒體怎么入門
  • 做網(wǎng)站要用到數(shù)據(jù)庫嗎東莞網(wǎng)站定制開發(fā)
  • 制作表格的軟件app優(yōu)化大師怎么提交作業(yè)
  • 儀征網(wǎng)站建設(shè)河北網(wǎng)站建設(shè)公司排名
  • 虛擬主機如何建設(shè)多個網(wǎng)站企業(yè)網(wǎng)站建設(shè)流程
  • 重慶做網(wǎng)站建設(shè)深圳市seo上詞多少錢
  • js實現(xiàn)網(wǎng)站浮動窗口產(chǎn)品關(guān)鍵詞
  • 烏魯木齊app制作seo引擎優(yōu)化軟件
  • 公司做網(wǎng)站怎么做網(wǎng)頁制作app
  • 網(wǎng)站做多個產(chǎn)品google官網(wǎng)瀏覽器
  • 推廣哪些app最掙錢天津seo選天津旗艦科技a
  • 網(wǎng)站建設(shè)電商百度seo手機
  • 網(wǎng)站與網(wǎng)頁 主頁的概念及它們的區(qū)別游戲推廣公司
  • 畢業(yè)設(shè)計做音樂網(wǎng)站seo搜索優(yōu)化專員