Linux下網絡編程-簡易poll服務器和客戶端

Linux下網絡編程-簡易poll服務器和客戶端

簡易poll服務器:
//編譯命令:g++ -g xxx.cpp -o xxx
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <poll.h>int main(int argc, char *argv[])
{// 1.創建套接字int serv_sock=socket(PF_INET, SOCK_STREAM, 0);struct sockaddr_in serv_adr;memset(&serv_adr, 0, sizeof(serv_adr));serv_adr.sin_family=AF_INET;serv_adr.sin_addr.s_addr=htonl(INADDR_ANY);serv_adr.sin_port=htons(atoi(argv[1]));// 2. 綁定 ip, portif(bind(serv_sock, (struct sockaddr*) &serv_adr, sizeof(serv_adr))==-1)error_handling("bind() error");// 3. 監聽if(listen(serv_sock, 5)==-1)error_handling("listen() error");//4 等待連接->循環//檢測->都緩沖區,委托內核去處理//數據初始化,創建自定義得文件描述集struct pollfd fds[1024];//初始化for(int i=0;i<1024;i++){fds[i].fd=-1;fds[i].events=POLLIN;}fds[0].fd=serv_sock;int maxfd=0;while (1) {//委托內核檢測if(poll(fds, maxfd+1, -1)==-1){perror("select");exit(0);}//檢測的度緩沖區有變化//有新連接if(fds[0].revents&POLLIN){// 接收連接請求struct sockaddr_in sockcli;socklen_t len = sizeof(sockcli);// 這個accept是不會阻塞的int connfd = accept(serv_sock, (struct sockaddr*)&sockcli, &len);//委托內核檢測connfd的讀緩沖區int i;for(i=0;i<1024;i++){if(fds[i].fd==-1){fds[i].fd=connfd;break;}}maxfd=i>maxfd?i:maxfd;}//通信。有客戶端發送數據過來for(int i=1;i<=maxfd;i++){//如果在集合中,說明都緩沖區有數據if(fds[i].revents&POLLIN){char buf[128];int ret = read(fds[i].fd, buf, sizeof(buf));if(ret == -1){perror("read");exit(0);}else if(ret == 0){printf("對方已經關閉了連接...\n");close(fds[i].fd);fds[i].fd = -1;}else{printf("客戶端say: %s\n", buf);write(fds[i].fd, buf, strlen(buf)+1);}}}}close(serv_sock);return 0;
}
簡易客戶端:
//編譯命令:g++ -g xxx.cpp -o xxx
#include <netinet/in.h>
#include <cstdio>
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/select.h>
#include <poll.h>
using namespace std;int main()
{//創建socket對象int Client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (Client == -1)//判斷是否創建成功{cout << "創建失敗" << endl;close(Client);return -1;}const char* ip = "127.0.0.1";//保存ip地址unsigned short port=9527;//保存端口//設置服務端sockaddr_in addrServer;addrServer.sin_addr.s_addr = inet_addr(ip);addrServer.sin_port = htons(port);addrServer.sin_family = AF_INET;//連接if (connect(Client, (sockaddr*)&addrServer, sizeof(addrServer))== -1){cout << "連接失敗" << endl;close(Client);return -1;}cout << "連接服務器成功" << endl;//接收和發送數據char rec[1024];char se[1024];while(1){memset(rec, 0, sizeof(rec));memset(se, 0, sizeof(se));scanf("%s", se);if (strcmp(se, "quit") == 0 || strcmp(se, "exit") == 0)break;if (send(Client, se, sizeof(se), 0) < 0)break;cout << "發送:" << se << endl;if (recv(Client, rec, sizeof(rec), 0) < 0)break;cout << "接收:" << rec << endl;}cout << "已與服務端斷開連接" << endl;close(Client);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41792.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ionic7 使用Capacitor打包 apk 之后,設置網絡權限

報錯處理 在打包的時候遇到過幾個問題&#xff0c;這里記錄下來兩個 Visual Studio Code運行ionic build出錯顯示ionic : 無法加載文件 ionic 項目通過 android studio 打開報錯 capacitor.settings.gradle 文件不存在 ionic7 項目初始化以及打包 apk 這篇文章講到了如果安裝…

2-25 基于matlab的語音信號降噪處理算法

基于matlab的語音信號降噪處理算法&#xff0c;采用譜減法&#xff0c;可以對強噪聲背景下的語音信號進行去噪。輸入原始信號及加噪信號&#xff0c;對加噪信號進行降噪&#xff0c;并提高信噪比。程序已調通&#xff0c;可直接運行。 2-25 語音信號降噪處理算法 譜減法 - 小紅…

餐飲管理系統-計算機畢業設計源碼43667

餐飲管理系統 摘 要 在信息化、數字化的時代背景下&#xff0c;餐飲行業面臨著前所未有的挑戰與機遇。為了提高運營效率、優化顧客體驗&#xff0c;餐飲企業亟需一套高效、穩定且靈活的管理系統來支撐其日常運營。基于Spring Boot的餐飲管理系統應運而生&#xff0c;成為餐飲行…

mac 安裝nvm的教程

在macOS上切換Node.js版本&#xff0c;可以使用nvm&#xff08;Node Version Manager&#xff09;。以下是安裝nvm和切換Node.js版本的步驟&#xff1a; 安裝nvm 下載方式 終端復制輸入&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.…

教育科研行業算力池化解決方案

教育科研行業算力池化解決方案 解決方案概述 1. 算力資源集中管理 建立校級算力中心:通過信息中心建設校級的算力中心,將分散在各學院或科研團隊的算力資源集中管理。利用算力池化技術:采用先進的算力池化技術(如趨動科技的OrionX),將物理GPU資源切分為多個虛擬GPU(vGP…

GIT - 一條命令把項目更新到遠程倉庫

前言 閱讀本文大概需要1分鐘 說明 更新項目到遠程倉庫只需要執行一條命令&#xff0c;相當的簡便 步驟 第一步 編輯配置文件 vim ~/.bash_profile第二步 寫入配置文件 gsh() {local msg"${1:-ADD COMMIT PUSH}"git add . && git commit -m "$m…

mipi協議中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)協議中,calibration(校準)和scramble(加擾)模式是兩個重要的特性,它們分別用于優化數據傳輸的準確性和減少信號干擾。以下是對這兩個模式的詳細解析: Calibration(校準)模式 目的與功能: 校準模式主要用于優化和補償由…

數據庫關鍵字執行順序

在 SQL 中&#xff0c;關鍵字的執行順序通常如下&#xff1a; FROM&#xff1a;確定要查詢的表或數據源&#xff0c;并執行表之間的連接操作&#xff08;如 INNER JOIN、LEFT JOIN 等&#xff09;。FROM 子句執行順序為從后往前、從右到左。ON&#xff1a;應用連接條件&#xf…

C生萬物之文件操作

文章目錄 一、為什么使用文件&#xff1f;二、什么是文件&#xff1f;1、程序文件2、數據文件3、文件名 三、文件的打開和關閉1、文件指針2、文件的打開和關閉 四、文件的順序讀寫1. 8個重要的庫函數1.1 單字符輸入輸出【fputc和fgetc】1.2 文本行輸入輸出【fputs和fgets】1.3 …

主干網絡篇 | YOLOv5/v7 更換主干網絡之 ShuffleNetv2 | 高效CNN架構設計的實用指南(2)

主干網絡篇 | YOLOv5/v7 更換主干網絡之 ShuffleNetv2 | 高效CNN架構設計的實用指南 概述 YOLOv5和YOLOv7是目前主流的輕量級目標檢測模型&#xff0c;在速度和精度方面取得了良好的平衡。然而&#xff0c;傳統的YOLOv5/v7模型使用FPN和CSPNet等結構作為主干網絡&#xff0c;…

機器學習 C++ 的opencv實現SVM圖像二分類的測試 (三)【附源碼】

機器學習 C 的opencv實現SVM圖像二分類的測試 (三) 數據集合下載地址&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 根據上節得到的svm.xml&#xff0c;測試結果為&#xff1a; #include <stdio.h> #include <time.h> #include <o…

網絡安全應急處理流程

網絡安全應急處理流程是指在發生網絡安全事件時&#xff0c;組織應采取的一系列措施&#xff0c;以快速響應、控制、恢復和調查網絡安全事件&#xff0c;確保業務連續性和數據安全。以下是一個詳細的網絡安全應急處理流程&#xff1a; 1. 準備階段 目標&#xff1a;建立和維護…

yolov5 json 和 txt數據格式關系

訓練階段 和 推理階段數據格式轉換說明 關于yolov5 數據格式一直以來都傻傻分不清楚&#xff0c;這下進行了一個梳理&#xff0c;做了筆記&#xff0c;也希望可幫助到有需要的有緣人~ 轉換部分代碼

大廠面試官贊不絕口的后端技術亮點【后端項目亮點合集(2):消息隊列、ElasticSearch、Mysql等亮點合集】

本文將持續更新~~ 歷史文章&#xff1a; 后端項目亮點合集&#xff08;1&#xff09;&#xff1a;Redis篇_后端項目有什么亮點-CSDN博客 本文的作用&#xff1a; &#xff08;1&#xff09;簡歷優化&#xff1a;針對自己的簡歷&#xff0c;對Redis亮點進行優化升級&#xff0c;…

虛擬機交叉編譯基于ARM平臺的opencv(ffmpeg/x264)

背景&#xff1a; 由于手上有一塊rk3568的開發板&#xff0c;需要運行yolov5跑深度學習模型&#xff0c;但是原有的opencv不能對x264格式的視頻進行解碼&#xff0c;這里就需要將ffmpegx264編譯進opencv。 但是開發板算力有限&#xff0c;所以這里采用在windows下&#xff0c;安…

【chatgpt】 PyTorch中reshape和view

在 PyTorch 中&#xff0c;reshape 和 view 都用于改變張量的形狀&#xff0c;但它們在實現和使用上有一些重要的區別。理解這些區別對于在復雜的張量操作中選擇合適的方法非常關鍵。 view 方法 連續性要求&#xff1a;view 方法要求原始張量在內存中是連續的。如果張量不是連…

從零開始實踐大模型 - 配置環境

本文地址&#xff1a;blog.lucien.ink/archives/549 本文將介紹在面向深度學習時&#xff0c;推薦的環境配置以及一些使用 Linux 的習慣。 本文的部分內容與 Debian 下 CUDA 生產環境配置筆記 有所重疊&#xff0c;但也有些許的不一樣&#xff0c;在正文中不額外注明。 前言 本…

絕緣子陶瓷絕緣子玻色絕緣子聚合物絕緣子檢測數據集VOC+YOLO格式2050張3類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;2050 標注數量(xml文件個數)&#xff1a;2050 標注數量(txt文件個數)&#xff1a;2050 標注…

Debezium系列之:支持在一個數據庫connector采集中過濾某些表的刪除事件

Debezium系列之:支持在一個數據庫connector采集中過濾某些表的刪除事件 一、需求二、相關技術三、參數設置四、消費數據一、需求 在一個數據庫的connector中采集了多張表,部分表存在數據歸檔的業務場景,會定期從表中刪除歷史數據,希望能過濾掉存在數據歸檔這些表的刪除事件…

Ubuntu 22.04遠程自動登錄桌面環境

如果需要遠程自動登錄桌面環境&#xff0c;首先需要將Ubuntu的自動登錄打開&#xff0c;在【settings】-【user】下面 然后要設置【Sharing】進行桌面共享&#xff0c;Ubuntu有自帶的桌面共享功能&#xff0c;不需要另外去安裝xrdp或者vnc之類的工具了 點開【Remote Desktop】…