40、網絡編程/TCP和UDP通信模型練習20240229

一、使用TCP模型創建服務器和客戶端完成簡單通信。

服務器代碼:

#include<myhead.h>
#define SER_IP "192.168.32.130"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{//1.創建監聽的套接字int sfd=-1;sfd=socket(AF_INET,SOCK_STREAM,0);//參數1表示使用的是ipv4的通信//參數2表示使用tcp通信類型//表示前面以及特定了通信協議if(sfd==-1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);//2.綁定ip地址和端口號struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success\n");//3.啟動監聽 允許客戶端鏈接if(listen(sfd,128)==-1){perror("listen error");return -1;}printf("listen success\n");//4.當有客戶端發來連接請求后 創建新的用于通信的套接字struct sockaddr_in cin;socklen_t socklen=sizeof(cin);int newfd=accept(sfd,(struct sockaddr*)&cin,&socklen);if(newfd==-1){perror("accept error");return -1;}printf("newfd=%d 有新客戶以及上線\n",newfd);printf("客戶端IP:%s,端口:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5.通信套接字和客戶端進行數據收發char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));int res=recv(newfd,rbuf,sizeof(rbuf),0);if(res==0){puts("客戶端已下線");break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);strcat(rbuf,"*_*");send(newfd,rbuf,strlen(rbuf),0);}//6.關閉套接字close(newfd);close(sfd);return 0;
}

客戶端代碼:

#include<myhead.h>
#define SER_IP "192.168.32.130"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{//1.創建用于通信的套接字文件描述符int cfd =socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//2.綁定(非必須)	//3.鏈接服務器struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//4.數據收發char wbuf[128]="";while(1){bzero(wbuf,sizeof(wbuf));printf("請輸入>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;send(cfd,wbuf,strlen(wbuf),0);printf("發送成功\n");if(strcmp(wbuf,"quit")==0)break;bzero(wbuf,sizeof(wbuf));recv(cfd,wbuf,sizeof(wbuf),0);printf("收到消息:%s\n",wbuf);}//5.關閉套接字close(cfd);return 0;
}

運行:

二、使用UDP模型 創建服務器和客戶端完成簡單通信。

服務器代碼:

#include<myhead.h>
#define SER_IP "192.168.32.130"
#define SER_PORT 6666
int main(int argc, const char *argv[])
{//創建套接字int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd==-1){perror("socket error");return -1;}//定義通用地址結構體存入服務器地址信息struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);//綁定端口號和ipif(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}//定義通用地址結構體用來獲取發來信息的對端地址struct sockaddr_in cin;socklen_t cinlen=sizeof(cin);char sbuf[128]="";while(1){bzero(sbuf,sizeof(bzero));//接收信息并獲取對方地址recvfrom(sfd,sbuf,sizeof(sbuf),0,(struct sockaddr*)&cin,&cinlen);printf("收到消息:%s\n",sbuf);strcat(sbuf,"*_*");//回復信息sendto(sfd,sbuf,sizeof(sbuf),0,(struct sockaddr*)&cin,cinlen);}close(sfd);//關閉套接字文件return 0;
}

客戶端代碼:

#include<myhead.h>
#define SER_IP "192.168.32.130"//客戶端ip
#define SER_PORT 6666   //客戶端端口號
int main(int argc, const char *argv[])
{int rfd=socket(AF_INET,SOCK_DGRAM,0);//創建套接字if(rfd==-1){perror("socket error");return -1;}//將服務器的信息存入地址通用結構體struct sockaddr_in sin;sin.sin_family =AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);char sbuf[128]="";while(1){bzero(sbuf,sizeof(sbuf));printf("請輸入>>>:");fgets(sbuf,sizeof(sbuf),stdin);sbuf[strlen(sbuf)-1]=0;//發送信息給服務器sendto(rfd,sbuf,sizeof(sbuf),0,(struct sockaddr*)&sin,sizeof(sin));bzero(sbuf,sizeof(sbuf));//接收對端服務器回復的信息 不接收對端地址信息recvfrom(rfd,sbuf,sizeof(sbuf),0,NULL,NULL);printf("收到信息:%s\n",sbuf);}close(rfd);//關閉套接字return 0;
}

運行:

思維導圖:

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

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

相關文章

解決 MySQL 未運行但鎖文件存在的問題

查看mysql狀態時&#xff0c;顯示錯誤信息"ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists"。 解決步驟 1、檢查 MySQL 進程是否正在運行 在繼續之前&#xff0c;我們首先需要確定 MySQL 進程是否正在運行。我們可以使用以下命令檢查…

MBD開發專欄介紹

文章目錄 MBD概念MBD工具箱介紹MBD專欄介紹MBD概念 MBD : Model-Based Design,基于模型的設計方法是一種系統開發方法論,即對系統進行建模、分析、驗證,然后基于模型自動生成代碼、測試用例和文檔的設計開發過程MBD采用的是基于自然語言和圖形語言的雙重建模方式,讓模型與用…

港中文聯合MIT提出超長上下文LongLoRA大模型微調算法

論文名稱&#xff1a; LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models 文章鏈接&#xff1a;https://arxiv.org/abs/2309.12307 代碼倉庫&#xff1a; https://github.com/dvlab-research/LongLoRA 現階段&#xff0c;上下文窗口長度基本上成為了評估…

算法修煉-動態規劃之路徑問題(1)

62. 不同路徑 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;選定一個網格為終點&#xff0c;走到這個網格的所有走法就是這個網格的上面一個網格的所有走法加上這個網格左邊一個網格的所有走法&#xff0c;然后做好初始化工作就行。 class Solution { public:int…

MATLAB環境下基于偏置場校正的改進模糊c-均值聚類圖像分割算法

基于聚類的分割方法是以統計學為基礎提出的一種分割方法。其實質是通過計算像素與每一類聚類中心的歐氏距離來判定像素與每一類聚類中心的相似性&#xff0c;距離近就說明像素與聚類中心相似性大&#xff0c;反之相似性小。基于一定標準下的相似性自動劃分成若干個子集(類)&…

markdown筆記(自用)

一.標題語法#空格&#xff0c;幾個#就是幾級標題 四級標題<H> 二.段落語法 用空白行分開 你好 三.換行 在一行的末尾添加兩個或多個空格&#xff0c;然后 v vvvvv 按回車鍵,即可創建一個換行()。 換行與段落的區別在于換行后兩行是挨著的&#xff0c;而段落之間有一…

項目預備知識

導入兩個頭文件 #include <graphics.h> // 引入 EasyX 的圖形庫頭文件 #include <conio.h> // 引入 conio.h 以使用 getch() 窗口創建函數&#xff1a;小黑屏 initgraph(640, 480, SHOWCONSOLE); closegraph(); //關閉一個窗口 設置背景顏色&#xff1a;這…

10.7、華為數通HCIP-DataCom H12-821單選題:121-140

121、關于OSPF特性描述錯誤的是:D A、OSPF采用鏈路狀態算法。 B、每個路由器通過泛洪 LSA 向外發布本地鏈路狀態信息 C、每臺 OSPF 設備都會收集其它路由器發來的LSA 所有的LSA 放在一起便組成了鏈路狀態數據庫LSDB, D、OSPF 區域0中所有路由器的 LSDB 都相同。 E、每臺…

【無標題】TMGM官網平臺切爾西足球俱樂部合作

TMGM作為一家在三大洲均設有辦事處的行業領導者&#xff0c;TMGM 被視為可靠的差價合約交易提供商&#xff0c;其重點是監管合規、技術創新與他聯系?&#x1f6f0;?TMGM818卓越的客戶服務。 切爾西足球俱樂部在亞太地區擁有龐大的球迷群體&#xff0c;并在該地區建立了多種亞…

2024年騰訊云優惠政策_騰訊云TOP10優惠活動

騰訊云服務器多少錢一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;騰訊云2核4G5M輕量應用服務器218元一年、756元3年&#xff0c;4核16G12M服務器32元1個月、312元一年&#xff0c;8核32G22M服務器115元1個月、345元3個月&#xff0c;騰訊云服務器網txyfwq.co…

AOP案例(黑馬學習筆記)

需求 需求&#xff1a;將案例中增、刪、改相關接口的操作日志記錄到數據庫表中 ● 就是當訪問部門管理和員工管理當中的增、刪、改相關功能接口時&#xff0c;需要詳細的操作日志&#xff0c;并保存在數據表中&#xff0c;便于后期數據追蹤。 操作日志信息包含&#xff1a; ●…

IO多路轉接

1.select 初識select 系統提供 select 函數來實現多路復用輸入 / 輸出模型 . select 系統調用是用來讓我們的程序監視多個文件描述符的狀態變化的 ; 程序會停在 select 這里等待&#xff0c;直到被監視的文件描述符有一個或多個發生了狀態改變 ; select函數模型 select的函…

服務器硬件得基礎知識介紹

服務器硬件是計算機硬件的一種&#xff0c;專門用于構建服務器系統。服務器硬件通常具有高性能、高可靠性和可擴展性等特點&#xff0c;以滿足企業級應用的需求。本文將從以下幾個方面介紹服務器硬件的基礎知識&#xff1a;服務器概述、CPU、內存、存儲、網絡、電源和散熱、服務…

【機器學習】CIFAR-10數據集簡介、下載方法(自動)

【機器學習】CIFAR-10數據集簡介、下載方法(自動) &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&#x1f448; 希望得到您的訂閱和支…

0904多元復合函數求導-多元函數微分法及其應用

文章目錄 1 復習一元函數復合函數求導2 一元函數與多元函數復合的情形3 多元函數與多元函數復合的情形4 其他情形5 抽象復合函數求導6 全微分不變性結語 1 復習一元函數復合函數求導 y f ( u ) , u ? ( x ) ? f [ ? ( x ) ] d y d x d y d u ? d u d x f ′ ( u ) ? ?…

Python正則表達式:從基礎到高級應用的全面總結與實戰【第103篇—JSON模塊】

Python正則表達式&#xff1a;從基礎到高級應用的全面總結與實戰 正則表達式是一種強大的文本匹配和處理工具&#xff0c;廣泛應用于文本處理、數據抽取、表單驗證等領域。本文將從正則表達式的基礎知識出發&#xff0c;逐步深入&#xff0c;最終結合代碼實戰&#xff0c;帶你…

趙文彬將出席無磷鍋爐工藝助劑在鍋爐水節水節能應用

演講嘉賓&#xff1a;趙文彬 集團副總/技術總監 上遠未來水務集團有限公司 演講題目&#xff1a;無磷鍋爐工藝助劑在鍋爐水節水節能方面的應用 會議簡介 “十四五”規劃中提出&#xff0c;提高工業、能源領城智能化與信息化融合&#xff0c;明確“低碳經濟”新的戰略目標&a…

mac 安裝hbuilderx

下載 HBuilderX下載地址: 下載地址 選額mac版本點擊下載 安裝 如圖&#xff0c;將HBuilderX拖到Applications&#xff0c;才是正確的安裝姿勢。 MacOSX&#xff0c;軟件必須安裝到/Applications目錄&#xff0c;如未安裝到此目錄&#xff0c;可能會出現插件安裝失敗、項目創建…

基于BERTopic模型的中文文本主題聚類及可視化

文章目錄 BERTopic簡介模型加載地址文本加載數據處理BERTopic模型構建模型結果展示主題可視化總結BERTopic簡介 BERTopic論文地址:BERTopic: Neural topic modeling with a class-based TF-IDF procedure BERTopic是一種結合了預訓練模型BERT和主題建模的強大工具。它允許我…

Linux中的動靜態庫

目錄 一、靜態庫 &#xff08;1&#xff09;靜態庫的優缺點&#xff1a; &#xff08;2&#xff09;Linux下靜態庫的創建和執行 1.直接編譯?編輯 2.指定路徑和庫名 3.用LIBRARY_PATH環境變量來配置路徑 二、動態庫 &#xff08;1&#xff09;動態庫的優缺點 &#xff…