日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用套接字实现 CS 模型

發布時間:2024/9/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用套接字实现 CS 模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

例子:大寫轉小寫。
注意:代碼都是運行在Linux內核中。
服務器端:

#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <arpa/inet.h> #include <ctype.h> int main() {// 1、創建套接字int lfd = socket(AF_INET, SOCK_STREAM, 0);// 2、綁定IP和端口號struct sockaddr_in server_addr; // 創建結構體server_addr.sin_family = AF_INET; // 指定IPv4server_addr.sin_port = htons(8888); // 將端口號轉換為網絡字節序server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 將本地任意IP轉為網絡字節序bind(lfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); // 綁定,注意強轉 // 3、監聽listen(lfd,128); // 上限128// 4、阻塞等待客戶端鏈接(獲得一個新的指向客戶端文件描述符) struct sockaddr_in client_addr; // 傳入參數:要先定義,然后傳入 socklen_t client_addr_len = sizeof(client_addr); // 傳入傳出參數:要先定義賦值,然后傳入 int cfd = accept(lfd, (struct sockaddr*)&client_addr, &client_addr_len); // 指向客戶端 // 輸出客戶端信息char ip[256] = {0}; // 用于存儲IP字符串printf("client IP: %s 端口號: %d\n", inet_ntop(AF_INET, &client_addr.sin_addr.s_addr, ip, sizeof(ip)),ntohs(client_addr.sin_port) ); // 2個函數的返回值分別是IP和端口號// 以下為通信char buf[256];while(1) // 實現循環操作 {// 讀取客戶端傳來的內容int n = read(cfd, buf, sizeof(buf)); // 返回值是讀到的字節數(字母個數)// 轉換字母for(int i = 0; i < n; i++)buf[i] = toupper( buf[i] ); // 寫回給客戶端write(cfd, buf, n);}//關閉close(lfd);close(cfd);return 0; }

客戶端:

#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> int main() {// 創建客戶端socketint cfd = socket(AF_INET, SOCK_STREAM, 0);// 客戶端應該綁定bind自己的IP和端口,但也可以不綁定,系統會幫助做“隱式綁定”// 注意:服務器可以做隱式綁定嗎? // 答: 不可以,因為隱式綁定,服務器的IP和端口不固定,客戶端不知道該連接哪// 鏈接服務器struct sockaddr_in server_addr; // 因為要鏈接服務器,存儲的服務器的IP地址和端口號// 指定服務器的地址信息server_addr.sin_family = AF_INET;server_addr.sin_port = htons(8888); inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr.s_addr); // 轉 網絡字節序 socklen_t addrlen = sizeof(server_addr); // 指定服務器的地址長度connect(cfd, (struct sockaddr*)&server_addr, addrlen); // 鏈接服務器char buf[256];while(1){// 向服務器傳數據fgets(buf, sizeof(buf), stdin); // 從鍵盤輸入,存入buf// 注意:fgets 特性,一直接收鍵盤輸入,以回車作為結尾,然后自動給加\0// 舉例 hello 經過fgets 存入buf的是 “hello\n\o”write(cfd, buf, strlen(buf)); // 因此,此處用strlen,而不是sizeof// 服務器處理后,客戶端讀取數據int n = read(cfd, buf, sizeof(buf));// 寫入屏幕write(STDOUT_FILENO, buf, n);}close(cfd);return 0; }

總結

以上是生活随笔為你收集整理的利用套接字实现 CS 模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。