2024.3.1 小項目

1、機械臂

#include <myhead.h>
#define SER_IP "192.168.125.32"        //服務器端IP
#define SER_PORT 8888                   //服務器端端口號#define CLI_IP "192.168.68.148"        //客戶端IP
#define CLI_PORT 9999                   //客戶端端口號
/**********************TCP客戶端********************/
int main(int argc, const char *argv[])
{//1.創建用于通信的套接字int cfd=-1;if((cfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//將端口號快速重用int reuse = 1;if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){perror("reuse error");return -1;}printf("reuse success\n");//2.綁定服務器IP地址和端口號(非必須)//2.1填充地址信息結構體struct sockaddr_in cin;cin.sin_family=AF_INET;cin.sin_port=htons(CLI_PORT);cin.sin_addr.s_addr=inet_addr(CLI_IP);//2.2綁定if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){perror("bind error");}printf("bind success\n");//3.連接服務器//3.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);//3.2連接到服務器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}//4.進行數據的收發操作char rbuf[5]={0xff,0x02,0x00,0x00,0xff};    //紅色機械臂unsigned char bbuf[5]={0xff,0x02,0x01,0x00,0xff};    //藍色機械臂//發送給服務器當做初始值send(cfd,rbuf,sizeof(rbuf),0);sleep(1);                           //防止沾包send(cfd,bbuf,sizeof(bbuf),0);char key=0;     //定義鍵盤輸入的值while(1){scanf("%c",&key);      getchar();             //吸收垃圾字符switch(key){case 'w':{rbuf[3] += 2;        //紅色機械臂每次增加3度if(rbuf[3]>=90){rbuf[3]=90;}send(cfd,rbuf,sizeof(rbuf),0);   //將鍵盤控制的結果發送到服務器端}break;case 's':{rbuf[3] -= 2;        if(rbuf[3]<=-90){rbuf[3]=-90;}send(cfd,rbuf,sizeof(rbuf),0);}break;case 'd':{bbuf[3]+=2;        if(bbuf[3]>=180){bbuf[3]=180;}send(cfd,bbuf,sizeof(bbuf),0);}break;case 'a':{bbuf[3]+=2;        if(bbuf[3]<=0){bbuf[3]=0;}send(cfd,bbuf,sizeof(bbuf),0);}break;default:printf("error\n");break;}}//5.關閉套接字close(cfd);return 0;
}

2、基于UDP的tftp通信

#include<myhead.h>
#define SER_IP "192.168.125.32"
#define SER_PORT 69//定義下載函數
int download(int cfd, struct sockaddr_in sin)
{//組件協議包:下載請求char pack[516]="";short *p1 = (short *)pack;*p1 = htons(1);    //設置操作碼char *p2 = pack+2;char file[20] = "";printf("請輸入要下載的文件名:");fgets(file, sizeof(file), stdin);file[strlen(file)-1] = 0;strcpy(p2, file);   //文件名char *p4 = p2 +strlen(p2) + 1;strcpy(p4, "octet");  //模式位int packlen = 4 + strlen(p2) + strlen(p4);   //請求包的大小//向服務器發送請求包sendto(cfd, pack ,packlen,0, (struct sockaddr*)&sin, sizeof(sin));struct sockaddr_in cin;socklen_t socklen = sizeof(cin);    //計算客戶端地址信息結構體的大小//打開文件int wfd = -1;if((wfd = open(file,O_WRONLY|O_CREAT|O_TRUNC,0664)) == -1){perror("open error");return -1;}while(1){//收取服務器發來的數據包//清空協議包bzero(pack, sizeof(pack));int res = recvfrom(cfd, pack, sizeof(pack), 0, (struct sockaddr*)&cin,&socklen);//判斷操作碼是否為3 以及數據包數據內容是否為512字節if(*p1 == ntohs(3)){//將數據包寫入文件write(wfd, pack+4, res-4);//回復一個應答包sendto(cfd, pack, 4, 0,(struct sockaddr*)&cin, sizeof(cin));//若數據內容小于512字節,讀取數據后結束接受數據if(res-4 < 512){printf("download success\n");break;}}else if(*p1 == ntohs(5)){printf("error\n");break;}}//關閉文件close(wfd);return 0;}
int upload(int cfd,struct sockaddr_in sin)
{//組件協議包:下載請求char pack[516]="";short *p1 = (short *)pack;*p1 = htons(1);    //設置操作碼char *p2 = pack+2;char file[20] = "";printf("請輸入要下載的文件名:");fgets(file, sizeof(file), stdin);file[strlen(file)-1] = 0;strcpy(p2, file);   //文件名char *p4 = p2 +strlen(p2) + 1;strcpy(p4, "octet");  //模式位int packlen = 4 + strlen(p2) + strlen(p4);   //請求包的大小//向服務器發送請求包sendto(cfd, pack ,packlen, 0, (struct sockaddr*)&sin, sizeof(sin));struct sockaddr_in cin;socklen_t socklen = sizeof(cin);    //計算客戶端地址信息結構體的大小//以只讀的方式打開文件int rfd = -1;if((rfd = open(file,O_RDONLY|O_CREAT|O_TRUNC,0664)) == -1){perror("open error");return -1;}//定義一個塊編號short num = 0;while(1){//清空協議包bzero(pack,sizeof(pack));//接受服務器發來的應答包int res = recvfrom(cfd,pack,sizeof(pack),0,(struct sockaddr*)&cin,&socklen);if(*p1 == ntohs(4)){//發送一個數據包*p1 = htons(3);num++;*(p1 + 1) = htons(num);//讀取數據res = read(rfd, p1+2,512);sendto(cfd, pack, sizeof(pack),0,(struct sockaddr*)&cin,sizeof(cin));if(res == 0){printf("upload success\n");break;}}//判斷是否為錯誤包else if(*p1 == ntohs(5)){printf("error\n");return -1;}}close(rfd);return 0;
}
int main(int argc, const char *argv[])
{//創建用于通信的套接字int cfd = socket(AF_INET, SOCK_DGRAM, 0);if(cfd == -1){perror("socket error");return -1;}//2、收發數據//填充服務器的地址信息結構體struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(SER_PORT);sin.sin_addr.s_addr = inet_addr(SER_IP);int key = 0;while(1){system("clear");printf("\t************1、下載**********\t\n");printf("\t************2、上傳**********\t\n");printf("\t************3、退出**********\t\n");printf("請輸入要執行的功能:");scanf("%d",&key);getchar();switch(key){case 1:{download(cfd,sin);}break;case 2:{upload(cfd,sin);}case 3:{goto END;}break;default:printf("error\n");break;}}
END://關閉套接字close(cfd);return 0;
}

思維導圖:

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

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

相關文章

串的BF算法(樸素查找算法)

串的模式匹配&#xff1a;在主串str的pos位置查找子串sub&#xff0c;找到返回下標&#xff0c;沒有找到返回-1。 1.BF算法思想 相等則繼續比較&#xff0c;不相等則回退&#xff1b;回退是i退到剛才位置的下一個&#xff08;i-j1&#xff09;;j退到0&#xff1b;利用子串是否…

Python matplotlib

目錄 1、安裝 matplotlib 2、繪制折線圖 修改標簽文字和線條粗細 校正圖形 3、繪制散點圖 繪制單點 繪制一系列點 自動計算數據 刪除數據點的輪廓 自定義顏色 使用顏色映射 自動保存圖表 4、隨機漫步 創建 RandomWalk() 類 選擇方向 繪制隨機漫步圖 給點著色 …

最簡單的ubuntu遠程桌面方法

最簡單的ubuntu遠程桌面方法 部署環境&#xff1a;Ubuntu 20.04 LTS 現在最常用的遠程控制Linux系統的方法是通過XRDP、VNC等&#xff0c;但是安裝配置過程繁瑣復雜&#xff0c;經常出現各種問題導致連接失敗&#xff0c;另外一方面延遲較高&#xff0c;操作卡頓。 經過我堅…

【Java項目介紹和界面搭建】拼圖小游戲——鍵盤、鼠標事件

&#x1f36c; 博主介紹&#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】 &#x1f389;點贊?評論?收藏 …

DDS數據分發服務——提升汽車領域數據傳輸效率

1.引言 隨著智能化技術的快速發展&#xff0c;汽車行業正經歷著一場革命性的變革。如今的分布式系統變得越來越復雜且龐大&#xff0c;對網絡通信基數要求在功能和性能層面越來越高。數據分發服務&#xff08;DDS&#xff09;作為一項先進的數據傳輸解決方案&#xff0c;在汽車…

2369. 檢查數組是否存在有效劃分(動態規劃)

2024-3-1 文章目錄 [2369. 檢查數組是否存在有效劃分](https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/)思路&#xff1a;代碼&#xff1a; 2369. 檢查數組是否存在有效劃分 思路&#xff1a; 1.狀態定義:f[i]代表考慮將[0,i]是否能被有效劃…

電腦要用多少V的電源?電腦電源輸入電壓是市電

臺式電源的輸出電壓是多少&#xff1f; 電腦電源輸出一般有三種不同的電壓&#xff0c;分別是&#xff1a; 12V、5V、3.3V。 電腦電源負責給電腦配件供電&#xff0c;如CPU、主板、內存條、硬盤、顯卡等&#xff0c;是電腦的重要組成部分。 工作電流根據不同的硬件及其使用狀…

LeetCode15:三數之和

題目描述 給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c;同時還滿足 nums[i] nums[j] nums[k] 0 。請 你返回所有和為 0 且不重復的三元組。 注意&#xff1a;答案中不可以包含重復的三元組…

【48天筆試強訓】day04

計算糖果 描述 A,B,C三個人是好朋友,每個人手里都有一些糖果,我們不知道他們每個人手上具體有多少個糖果,但是我們知道以下的信息&#xff1a; A - B, B - C, A B, B C. 這四個數值.每個字母代表每個人所擁有的糖果數. 現在需要通過這四個數值計算出每個人手里有多少個糖果…

編程語言:SQL Server數據庫使用教程,SQL Server增刪改查語句

「作者主頁」&#xff1a;士別三日wyx 「作者簡介」&#xff1a;CSDN top100、阿里云博客專家、華為云享專家、網絡安全領域優質創作者 「推薦專欄」&#xff1a;對網絡安全感興趣的小伙伴可以關注專欄《網絡安全自學教程》 SQL Server是微軟提供的一種關系型數據庫&#xff0c…

Python算法100例-3.3 阿姆斯特朗數

完整源代碼項目地址&#xff0c;關注博主私信源代碼后可獲取 1.問題描述2.問題分析3.算法設計4.確定程序框架5.完整的程序6.問題拓展 1&#xff0e;問題描述 如果一個整數等于其各個數字的立方和&#xff0c;則該數稱為“阿姆斯特朗數”&#xff08;亦稱為自戀性數&#xff…

nacos開啟鑒權+springboot配置用戶名密碼

nacos默認沒有開啟鑒權&#xff0c;springboot無需用戶名密碼即可連接nacos。從2.2.2版本開始&#xff0c;默認控制臺也無需登錄直接可進行操作。 因此本文記錄一下如何開啟鑒權&#xff0c;基于nacos2.3.0版本。 編輯nacos服務端的application.properties&#xff1a; # 開…

Linux/Docker 修改系統時區

目錄 1. Linux 系統1.1 通過 timedatectl 命令操作1.2 直接修改 /etc/localtime 文件 2. Docker 容器中的 Linux 操作環境&#xff1a; CentOS / AlmaOSMySQL Docker 鏡像 1. Linux 系統 1.1 通過 timedatectl 命令操作 使用 timedatectl list-timezones 命令列出可用的時區…

uniapp 地圖行車軌跡

文章目錄 uniapp 地圖行車軌跡1、畫地圖2、切換地圖中心點3、畫路線4、軌跡移動5、標記點及自定義內容 uniapp 地圖行車軌跡 官網地圖組件&#xff1a;https://uniapp.dcloud.net.cn/component/map.html 官網地圖組件控制&#xff1a;https://uniapp.dcloud.net.cn/api/locati…

【Java數據結構 -- 二叉樹的基本操作】

二叉樹的基本操作 1.獲取樹中節點的個數1.1 計數器遞歸的思路1.2 子問題思路&#xff1a; 2. 獲取葉子個數3. 獲取第k層節點的個數4.獲取二叉樹的高度5.檢測值為value的元素是否存在 1.獲取樹中節點的個數 思路&#xff1a;整棵樹的節點個數 左子樹的節點個數&#xff0b;右子…

休息日的思考與額外題——雙指針、原地哈希day28

文章目錄 前言一、11. 盛最多水的容器二、41. 缺失的第一個正數三、42. 接雨水總結 前言 一個本碩雙非的小菜雞&#xff0c;備戰24年秋招&#xff0c;計劃二刷完卡子哥的刷題計劃&#xff0c;加油&#xff01; 二刷決定精刷了&#xff0c;于是參加了卡子哥的刷題班&#xff0c…

32單片機基礎:旋轉編碼器計次

接線圖如上圖所示。 我們初始化一下PB0和PB1兩個GPIO口外設中斷&#xff0c;當然&#xff0c;這里只初始化一個外部中斷也能完成功能的對于編碼器而言&#xff0c;下圖所示為正轉的波形。如果把一相的下降沿用作觸發中斷&#xff0c;在中斷時刻讀取另一相的電平&#xff0c;正…

【EXCEL】SUMIFS多次條件篩選數據

問題案例 有如下兩個工作表&#xff08;Sheet1和Sheet2&#xff09;&#xff1a; 在sheet1中的C2行獲得一個結果&#xff08;項目1的1月收入&#xff09;&#xff0c;是對sheet2中的A列篩選出“項目1”B列篩選出“202401”而獲得對應C列的結果。借助excel的公式如何實現。 S…

【算法科目】2024年第二屆全國大學生信息技術認證挑戰賽 題解

圖像壓縮 曾經看到過&#xff0c;這是一道洛谷原題&#xff0c;很可惜我沒做過&#xff0c;有點看不懂就沒嘗試。 原題鏈接&#xff1a;B3851 [GESP202306 四級] 圖像壓縮 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 因數分解 直接枚舉就行了&#xff0c;從2開始找因子&a…

Spring:EnclosingClass工具類分辨

Spring&#xff1a;EnclosingClass工具類分辨 1 前言 通過Spring的工具分辨EnclosingClass類。 測試類如下&#xff1a; package com.xiaoxu.test.enclosingClass;/*** author xiaoxu* date 2024-01-18* java_demo2:com.xiaoxu.test.enclosingClass.Outter*/ public class …