当前位置: 首页 > news >正文

网编.hw.9.10

云盘下载

#include <myhead.h>
#define SER_IP "192.168.108.93"
#define SER_PORT 69
#define addr "192.168.109.6"
#define port 8888/******************主程序******************/
int main(int argc, const char *argv[])
{//1、创建一个用于通信的套接字文件描述符int cfd = socket(AF_INET, SOCK_DGRAM, 0);if(cfd == -1){perror("socket error");return -1;}/*2、绑定ip和端口号(可选)struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_addr.s_addr = inet_addr(CLI_IP);cin.sin_port = htons(CLI_PORT);if(bind(cfd, (struct sockaddr*)&cin, sizeof(cin))==-1){perror("bind error");return -1;}*///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);socklen_t addrlen = sizeof(sin);//向服务器发送一个下载请求char msgbuf[516] = "";//组装协议//1、组装操作码,下载请求的操作码为1short *p1 = (short *)msgbuf;*p1 = htons(1);           //网络字节序,因为是2字节无符号整数//2、将要下载的文件名放入char filename[20] = "";printf("请输入要下载的文件名:");fgets(filename, sizeof(filename), stdin);filename[strlen(filename)-1] = 0;//封装到协议中char *p2 = msgbuf+2;         //跳过前两个字节strcpy(p2, filename);//3、将传输模式放入协议中char *p4 = p2+strlen(p2)+1;strcpy(p4, "octet");int size = 2+strlen(p2)+strlen(p4)+2;//将请求数据包发送给服务器sendto(cfd, msgbuf, size, 0, (struct sockaddr*)&sin, sizeof(sin));	//以只写的形式打开一个名为filename的文件int fd=-1;if((fd=open(filename,O_CREAT|O_WRONLY,0664))==-1){perror("open error");return -1;}while(1){//通过recvfrom接受服务器传来的消息包int len;if((len=recvfrom(cfd,msgbuf,sizeof(msgbuf),0,(struct sockaddr*)&sin,&addrlen))==-1){perror("recvfrom error");return -1;}//解析传来的消息报中的前两字节short x=ntohs(*(short*)msgbuf);//判断如果前两字节的值为5,说明传过来的是错误消息包if(x==5){printf("[error-%d]:%s\n",ntohs(*(msgbuf+2)),msgbuf+4);}//如果前两字节的值为3,则说明传来的是数据信息else if(x==3){//判断消息包的四个字节后的数据长度是否为512//如果是将消息包的4个字节后的数据,写入到文件中if(len==516){write(fd,msgbuf+4,512);//并回复一个:确认包//判断消息包的4字节后的数据长度是否为512,如果是//将消息包的4字节后的数据,写入到文件中//并且回复一个4字节确认包short *p = (short *)msgbuf;*p = htons(4);sendto(cfd, msgbuf, 4, 0, (struct sockaddr*)&sin, sizeof(sin));	}//如果消息包的4字节后的长度为小于512if(len<516){//将最后的数据写入到文件中,回复一个确认包,结束循环write(fd,msgbuf+4,len-4);short *p=(short *)msgbuf;*p=htons(4);sendto(cfd,msgbuf,4,0,(struct sockaddr*)&sin,sizeof(sin));printf("文件下载完成\n");break;}}}//4、关闭套接字close(cfd);close(fd);return 0;
}

机械臂

#include <myhead.h>
#define dis_port 8888
#define dis_addr "192.168.108.93"
#define port 7776
#define addr "192.168.109.6"
int main(int argc, const char *argv[])
{//1.socketint cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){perror("socket error");return -1;}//2.绑定ip地址struct sockaddr_in cin;cin.sin_family=AF_INET;cin.sin_port=htons(port);cin.sin_port=inet_addr(addr);if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1){perror("bind error");return -1;}printf("bind success..\n");//3.connect组装对端信息地址结构体struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(dis_port);sin.sin_addr.s_addr=inet_addr(dis_addr);if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success..\n");//设置机械臂初始状态char rbuf[5]={0xff,0x02,0x00,0x00,0xff};unsigned char bbuf[5]={0xff,0x02,0x01,0x00,0xff};send(cfd,rbuf,sizeof(rbuf),0);send(cfd,bbuf,sizeof(bbuf),0);//4.read/writechar buf[128]="";int x;while(1){printf("输入要操作的机械臂[红0/蓝1]:");scanf("%d",&x);if(x==0){while(1){int a;printf("输入移动的角度:");scanf("%d",&x);if(x==999)break;rbuf[3]+=x;send(cfd,rbuf,sizeof(rbuf),0);}}else if(x==1){while(1){	int a;printf("输入移动的角度:");scanf("%d",&x);if(x==999)break;bbuf[3]+=x;send(cfd,bbuf,sizeof(bbuf),0);}}else{printf("输入的数字有误..\n");break;}}close(cfd);return 0;
}


文章转载自:

http://VhYdcMQN.prysb.cn
http://q8sQwvFG.prysb.cn
http://NfqN5q5p.prysb.cn
http://SYWVkimj.prysb.cn
http://WZQyPj79.prysb.cn
http://0sfsKpso.prysb.cn
http://1VMJ93Qs.prysb.cn
http://ufDP6X7q.prysb.cn
http://TW76SXW7.prysb.cn
http://1x2T8dwe.prysb.cn
http://LROHzTnX.prysb.cn
http://azQBb1C0.prysb.cn
http://4KmF5ERh.prysb.cn
http://M68J21qU.prysb.cn
http://HeN5hOkV.prysb.cn
http://ETk7AzaD.prysb.cn
http://CAvKZdq8.prysb.cn
http://MkRbQfKR.prysb.cn
http://5i2qYAgl.prysb.cn
http://owV5nVCg.prysb.cn
http://w7Nc17pL.prysb.cn
http://Hsllr39j.prysb.cn
http://BSlQDk0r.prysb.cn
http://bTHS09l3.prysb.cn
http://HmmkKvth.prysb.cn
http://svdjJQVB.prysb.cn
http://1Ez4vC3p.prysb.cn
http://lyxWRsn0.prysb.cn
http://UJq7OHWq.prysb.cn
http://0XyyhMDJ.prysb.cn
http://www.dtcms.com/a/377753.html

相关文章:

  • 4215kg轻型载货汽车变速器设计cad+设计说明书
  • Python数据可视化科技图表绘制系列教程(七)
  • 【 VMware Workstation 提示“虚拟机已在使用”怎么办?一篇文章彻底解决!】
  • WebSocket网络编程深度实践:从协议原理到生产级应用
  • 数字健康新图景:AI健康小屋如何重塑我们的健康生活
  • ⚡ Linux sed 命令全面详解(包括参数、指令、模式空间、保持空间)
  • Codeforces Round 1049 (Div. 2) D题题解记录
  • 视频分类标注工具
  • 【学习】vue计算属性
  • Torch 安装
  • 如何使用 DeepSeek 帮助自己的工作?的技术文章大纲
  • Object.values(allImages).forEach(src => { }
  • git rebase 的使用场景
  • 嵌入式场景kvdb数据库的使用(二)——UnQLite数据库的移
  • 基于MQTT的实时消息推送系统设计与实现(Java后端+Vue前端)
  • 柔性数组与队列杂记
  • XCVP1902-2MSEVSVA6865 AMD 赛灵思 XilinxVersal Premium FPGA
  • iPaaS与ESB:企业集成方案的选择与实践!
  • [硬件电路-177]:如何用交流电流源(偏置电流+交变电流)模拟PD的暗电流 + 变化的光电流
  • O3.1 opencv高阶
  • 【JAVA】java的程序逻辑控制
  • 真正有效的数据指标体系应该长什么样?
  • MATLAB中的霍夫变换直线检测
  • Thread类的基本用法(上)
  • 数据建模的真相!为什么90%的团队都在做无用功
  • 30 分钟让 AI 开口查订单:React-Native + Coze 全链路语音对话落地指南
  • Nacos报错NacosException: Client not connected, current status:STARTING
  • 基于SpringBoot+Vue2开发的母婴育婴师平台
  • GNU 工具链与ARM 交叉编译工具链
  • 【大模型应用开发 6.LlamaIndex-Workflow】