3.4作業

課上代碼復習:

廣播接收端代碼:

#include<myhead.h>
int main(int argc, const char *argv[])
{//創建套接字int rfd = socket(AF_INET,SOCK_DGRAM,0);if(rfd == -1){perror("socket error");return -1;}printf("rfd = %d\n",rfd);//填充地址信息結構體struct sockaddr_in rin;rin.sin_family = AF_INET;rin.sin_port = htons(8888);rin.sin_addr.s_addr = inet_addr("192.168.244.255");//綁定if(bind(rfd,(struct sockaddr*)&rin,sizeof(rin)) == -1){perror("bind error");return -1;}//接收廣播消息char rbuf[128] ="";while(1){//清空消息bzero(rbuf,sizeof(rbuf));//讀取消息recv(rfd,rbuf,sizeof(rbuf),0);printf("收到消息:%s\n",rbuf);}//關閉套接字close(rfd);return 0;
}

廣播發送端代碼:

#include<myhead.h>
int main(int argc, const char *argv[])
{//創建套接字int sfd = socket(AF_INET,SOCK_DGRAM,0);if(sfd == -1){perror("sockeet error");return -1;}//設置當前套接字允許廣播屬性int broadcast = 1;if(setsockopt(sfd,SOL_SOCKET,SO_BROADCAST,&broadcast,sizeof(broadcast)) == -1){perror("setsockopt error");return -1;}//綁定(可選)//填充接收端地址信息結構體struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.s_addr = inet_addr("192.168.244.255");//發送數據char sbuf[128] = "";while(1){printf("請輸入>>");fgets(sbuf,sizeof(sbuf),stdin);sbuf[strlen(sbuf)-1] = 0;sendto(sfd,sbuf,strlen(sbuf),0,(struct sockaddr*)&sin,sizeof(sin));printf("發送成功\n");}//關閉close(sfd);return 0;
}

組播接收端代碼:

#include<myhead.h>
int main(int argc, const char *argv[])
{//創建套接字int rfd = socket(AF_INET,SOCK_DGRAM,0);if(rfd == -1){perror("socket error");return -1;}printf("rfd = %d\n",rfd);//設置加入多播組struct ip_mreqn imr;imr.imr_multiaddr.s_addr = inet_addr("224.1.2.3");   //組播ipimr.imr_address.s_addr = inet_addr("192.168.244.140");   //本地ipimr.imr_ifindex = 2;        //網卡編號if(setsockopt(rfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&imr,sizeof(imr)) == -1){perror("setsockopt error");return -1;}//填充地址信息結構體struct sockaddr_in rin;rin.sin_family = AF_INET;rin.sin_port = htons(8888);rin.sin_addr.s_addr = inet_addr("224.1.2.3");//綁定if(bind(rfd,(struct sockaddr*)&rin,sizeof(rin)) == -1){perror("bind error");return -1;}//接收組播消息char rbuf[128] ="";while(1){//清空消息bzero(rbuf,sizeof(rbuf));//讀取消息recv(rfd,rbuf,sizeof(rbuf),0);printf("收到消息:%s\n",rbuf);}//關閉套接字close(rfd);return 0;
}

組播發送端代碼:

#include<myhead.h>
int main(int argc, const char *argv[])
{//創建套接字int rfd = socket(AF_INET,SOCK_DGRAM,0);if(rfd == -1){perror("socket error");return -1;}//綁定端口號和ip地址//填充地址信息結構體struct sockaddr_in rin;rin.sin_family = AF_INET;rin.sin_port = htons(9999);rin.sin_addr.s_addr = inet_addr("192.168.244.140");//綁定端口號和IPif(bind(rfd,(struct sockaddr*)&rin,sizeof(rin)) == -1){perror("bind error");return -1;}//發送消息//填充接收端地址信息結構體struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.s_addr = inet_addr("224.1.2.3");char sbuf[128] = "";while(1){printf("請輸入>>");fgets(sbuf,sizeof(sbuf),stdin);sbuf[strlen(sbuf)-1] = 0;//向組播地址中發送信息sendto(rfd,sbuf,strlen(sbuf),0,(struct sockaddr*)&sin,sizeof(sin));printf("發送成功\n");}return 0;
}

流式域套接字

TCP服務器端實現:

#include<myhead.h>
int main(int argc, const char *argv[])
{//創建套接字int sfd = socket(AF_UNIX,SOCK_STREAM,0);if(sfd == -1){perror("socket error");return -1;}//判斷套接字文件是否存在,如果存在需要刪除if(access("./mysocket",F_OK) == 0);{//說明存在,將該文件刪除if(unlink("./mysocket") == -1){perror("unlink error");return -1;}}//綁定套接字文件//填充地址信息結構體struct sockaddr_un sun;sun.sun_family = AF_UNIX;               //地址族strcpy(sun.sun_path , "./mysocket");    //套接字文件//綁定 if(bind(sfd , (struct sockaddr*)&sun , sizeof(sun)) == -1){perror("bind error");return -1;}printf("bind success\n");//監聽if(listen(sfd,128) == -1){perror("listen error");return -1;}printf("listen success\n");//阻塞等待客戶端連接請求//定義容器接收客戶端地址信息struct sockaddr_un cun;socklen_t socklen = sizeof(cun);int newfd = -1;if((newfd = accept(sfd,(struct sockaddr*)&cun,&socklen))==-1){perror("accept error");return -1;}printf("有新客戶發來鏈接請求\n");//數據收發char rbuf[128]="";while(1){//清空bzero(rbuf,sizeof(rbuf));//收取數據recv(newfd,rbuf,sizeof(rbuf),0);printf("[%s]:%s\n",cun.sun_path,rbuf);//鏈接一個笑臉回復strcat(rbuf,"*_*");//發送回去send(newfd,rbuf,strlen(rbuf),0);printf("發送成功\n");}//關閉套接字close(sfd);close(newfd);return 0;
}

TCP客戶端實現:

#include<myhead.h>
int main(int argc, const char *argv[])
{//1.創建用于通信的套接字文件描述符int cfd = socket(AF_UNIX,SOCK_STREAM,0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n",cfd);//判斷套接字文件是否存在,如果存在則需要刪除if(access("./mysocket1",F_OK) == 0){//說明存在,將該文件刪除if(unlink ("./mysocket1") == -1){perror("unlink error");return -1;}}//2.綁定(非必須)//填充地址信息結構體struct sockaddr_un cun;cun.sun_family = AF_UNIX;strcpy(cun.sun_path,"./mysocket1");//綁定if(bind(cfd,(struct sockaddr*)&cun , sizeof(cun)) == -1){perror("bind error");return -1;}//3.連接服務器//3.1填充要連接的服務器地址信息結構體struct sockaddr_un sun;sun.sun_family = AF_UNIX;               //地址族strcpy(sun.sun_path,"./mysocket");      //套接字文件//3.2連接服務器if(connect(cfd ,(struct sockaddr*)&sun,sizeof(sun)) == -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>int main(int argc, const char *argv[])
{//創建用于通信的套接字int sfd = socket(AF_UNIX,SOCK_DGRAM,0);if(sfd == -1){perror("socket error");return -1;}printf("sfd = %d\n",sfd);//判斷套接字文件是否存在,如果存在則需要刪除if(access("./linux1",F_OK) == 0){//說明文件存在,將該文件刪除if(unlink("./linux1") == -1){perror("unlink error");return -1;}}//綁定IP地址和端口號//填充地址信息結構體struct sockaddr_un sun;sun.sun_family = AF_UNIX;          //地址族strcpy(sun.sun_path,"./linux1");//綁定if(bind(sfd,(struct sockaddr*)&sun,sizeof(sun)) == -1){perror("bind error");return -1;}printf("bind success\n");//收發數據char rbuf[128] = "";//定義容器接受對端地址信息結構體struct sockaddr_un cun;socklen_t socklen = sizeof(cun);while(1){//清空數組bzero(rbuf , sizeof(rbuf));//接收數據recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cun,&socklen);printf("收到信息為:%s\n",rbuf);//將消息加“*_*”返回strcat(rbuf,"*_*");if(sendto(sfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&cun,socklen) == -1){perror("sendto error");return -1;}}//關閉套接字close(sfd);return 0;
}

UDP客戶端實現:

#include<myhead.h>int main(int argc, const char *argv[])
{//創建用于通信的套接字int cfd = socket(AF_UNIX,SOCK_DGRAM,0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n",cfd);//判斷套接字文件是否存在,如果存在需要刪除if(access("./linux2",F_OK) == 0){//說明存在,將該文件刪除if(unlink("./linux2") == -1){perror("unlink error");return -1;}}//綁定IP地址和端口號(非必要)struct sockaddr_un cun;cun.sun_family = AF_UNIX;strcpy(cun.sun_path,"./linux2");if(bind(cfd,(struct sockaddr*)&cun,sizeof(cun)) == -1){perror("bind error");return -1;}//收發數據char wbuf[128] = "";//定義容器,記錄服務器地址信息結構體struct sockaddr_un sun;sun.sun_family = AF_UNIX;strcpy(sun.sun_path,"./linux1");while(1){//清空數組bzero(wbuf , sizeof(wbuf));//從終端獲取數據printf("請輸入:");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1] = 0;//將數據發送給服務器sendto(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sun,sizeof(sun));printf("發送成功\n");//接收服務器回復的消息bzero(wbuf , sizeof(wbuf));}//關閉套接字close(cfd);return 0;
}

課程總結:

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

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

相關文章

臺式電腦電源各線的電壓和電流輸出和輸出電流

臺式電腦電源是電腦硬件的重要組成部分。 它為計算機的各個部件提供所需的電壓和電流。 不同的硬件設備和組件有不同的電壓和電流輸出。 下面詳細介紹臺式電腦電源各線的電壓&#xff0c;包括3.3V、5V、12V、-12V、-5V和5VSB&#xff0c;以及它們的輸出電流和用途。 3.3V&#…

【AI+CAD】(一)ezdxf 解析DXF文件

DXF文件格式理解 DXF文件格式是矢量圖形文件格式&#xff0c;其詳細說明了如何表示不同的圖形元素。 DXF是一個矢量圖形文件&#xff0c;它捕獲CAD圖形的所有元素&#xff0c;例如文本&#xff0c;線條和形狀。更重要的是&#xff0c;DXF是用于在CAD應用程序之間傳輸數據的圖形…

STM32自學?I2C

這里只是大體介紹&#xff0c;具體的可參考STM32數據手冊

數據結構與算法-選擇排序

引言 在計算機科學中&#xff0c;數據結構和算法是兩個至關重要的基石。它們共同決定了程序的效率、可讀性和可維護性。本文我們將聚焦于一種基礎而直觀的排序算法——選擇排序&#xff0c;并探討其內在的工作機制以及在實際應用中的優缺點。 一、什么是選擇排序&#xff1f; …

Leetcode 3067. Count Pairs of Connectable Servers in a Weighted Tree Network

Leetcode 3067. Count Pairs of Connectable Servers in a Weighted Tree Network 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3067. Count Pairs of Connectable Servers in a Weighted Tree Network 1. 解題思路 這一題沒想到什么好的方法&#xff0c;走的是暴力求解的路…

xss.haozi.me:0x07

<img src1 onerroralert(1)

Spring MVC ThemeResolver原理解析

在Spring MVC框架中&#xff0c;ThemeResolver&#xff08;主題解析器&#xff09;是一個重要但經常被忽視的組件。它負責解析和管理Web應用程序中的主題設置&#xff0c;允許用戶根據不同的需求和偏好切換界面主題。ThemeResolver為開發者提供了一種靈活的方式來控制應用程序的…

tomcat下載安裝配置教程

tomcat下載安裝配置教程 我是使用tomcat下載安裝及配置教程_tomcat安裝-CSDN博客 此貼來進行安裝配置&#xff0c;原文21年已經有些許不同。 下載tomcat 官網&#xff1a;http://tomcat.apache.org/ 我們老師讓安裝8.5以上&#xff0c;所以我直接選擇版本9 點擊9頁面之后…

DPDK常用API合集三

librte_timer 此庫為 DPDK 執行單元提供定時器服務&#xff0c;提供異步執行函數的能力。它可以是周期性的函數調用&#xff0c;也可以是一次性調用。它使用環境抽象層&#xff08;EAL&#xff09;提供的定時器接口獲取精確的時間參考&#xff0c;并可以根據需要以每個核心為基…

2024.03.03藍橋云課筆記——排序

sort簡介 #include<algorithm> 使用的是快速排序 時間復雜度為O(nlogn) sort使用(默認是從小到大) 1.sort(起始地址&#xff0c;結束地址的下一位&#xff0c;*比較函數&#xff09;&#xff1b; #include<iostream> #include<algorithm> using namesp…

HTTPS的實現原理

圖片來源&#xff1a;HTTPS 詳解一&#xff1a;附帶最精美詳盡的 HTTPS 原理圖 - 個人文章 - SegmentFault 思否 加密流程按圖中的序號分為&#xff1a; 客戶端請求 HTTPS 網址&#xff0c;然后連接到 server 的 443 端口 (HTTPS 默認端口&#xff0c;類似于 HTTP 的80端口)。…

Windows批處理:bat文件學習

目錄 第一章、快速了解Windows批處理1.1&#xff09;Windows批處理相關概念介紹1.1.1&#xff09;批處理的起源1.1.2&#xff09;bat文件介紹 1.2&#xff09;Demo1.2.1&#xff09;創建文件添加命令1.2.2&#xff09;bat腳本中的命令解釋 第二章、實例2.1&#xff09;點擊bat文…

navicat安裝11.3

一、安裝navicat 1、下載navicat 2、解壓壓縮包 3、點擊exe文件 4、輸入密鑰&#xff1a; NAVH-WK6A-DMVK-DKW3 5、點擊打開&#xff1a; 輸入連接參數&#xff1a; 6、查看連接好倉庫 7、 在使用navicat來編寫sql語句 8、編寫語句 連接不上問題&#xff0c;檢查問題&#…

[出錯]-RuntimeError: “slow_conv_transpose2d_out_cpu“ not implemented for ‘Byte‘

一開始我一直一維是torch版本的問題 輸入是用cv2讀出來的&#xff0c;數據類型dtype是默認是unit8&#xff0c;輸入到模型中&#xff0c;除了要將他轉為tenso以外&#xff0c;還要.float將數據類型轉為浮點數。

【Vue3】深入理解Vue中的ref屬性

&#x1f497;&#x1f497;&#x1f497;歡迎來到我的博客&#xff0c;你將找到有關如何使用技術解決問題的文章&#xff0c;也會找到某個技術的學習路線。無論你是何種職業&#xff0c;我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章&#xff0c;也歡…

Redis 之三:Redis 的發布訂閱(pub/sub)

概念介紹 Redis 發布訂閱 (pub/sub) 是一種消息通信模式&#xff0c;它允許客戶端之間進行異步的消息傳遞 Redis 客戶端可以訂閱任意數量的頻道。 模型中的角色 在該模型中&#xff0c;有三種角色&#xff1a; 發布者&#xff08;Publisher&#xff09;&#xff1a;負責發送信…

嵌入式中7個底層數據結構分解

在編程的世界里&#xff0c;數據結構是構建信息框架的骨架。就像現實生活中的建筑需要精心設計的結構一樣&#xff0c;我們的數據也需要合適的結構來保證程序的高效和穩定。今天&#xff0c;我們就像探險家一樣&#xff0c;一起去探索七大數據結構的奧秘&#xff0c;并揭開它們…

光路科技:工業以太網交換機引領工業互聯網新篇章

隨著全球范圍內工業4.0的浪潮不斷涌動&#xff0c;工業互聯網作為其核心驅動力&#xff0c;正引領著工業生產向智能化、網絡化的嶄新階段邁進。在這一轉型的浪潮中&#xff0c;光路科技憑借其卓越的工業互聯設備與創新解決方案&#xff0c;正為工業互聯網領域的發展注入新的活力…

Linux環境基礎開發工具使用

目錄 1.Linux軟件包管理器yum 什么是軟件包 關于 lrzsz 查看軟件包 2.Linux開發工具 2.1.vim的基本概念 2.2vim的基本操作 2.3vim命令模式命令集 1.插入模式 2.從插入模式切換為命令模式 3.移動光標 4.刪除文字 5.復制 6.替換 7.撤銷上一次的操作 8.更改 2.4v…

藍橋杯 2020 第一輪省賽 A 組 F 題(B 組 G 題)解碼

藍橋杯 2020 第一輪省賽 A 組 F 題&#xff08;B 組 G 題&#xff09;解碼 題目描述 小明有一串很長的英文字母&#xff0c;可能包含大寫和小寫。 在這串字母中&#xff0c;有很多連續的是重復的。小明想了一個辦法將這串字母表達得更短&#xff1a;將連續的幾個相同字母寫成…