控制机械臂
- #include<myhead.h>
- #define SER_IP "192.168.126.2"
- #define SER_PORT 8888
-
- #define CLI_IP "192.168.252.165"
- #define CLI_PORT 9999
-
- int main(int argc, const char *argv[])
- {
- int cfd=socket(AF_INET,SOCK_STREAM,0);
- if(cfd==-1)
- {
- perror("socket error");
- return -1;
- }
- printf("cfd=%d\n",cfd);
-
- struct sockaddr_in cin;
- cin.sin_family=AF_INET;
- cin.sin_port=htons(CLI_PORT);
- cin.sin_addr.s_addr=inet_addr(CLI_IP);
-
- if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
- {
- perror("bind error");
- return -1;
- }
- printf("connect success\n");
- 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;
- }
-
- 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);
- fflush;
-
- switch(key)
- {
- case'W':
- case'w':
- {
- rbuf[3]+=2;
- if(rbuf[3]>=90)
- {
- rbuf[3]=90;
- }
- send(cfd,rbuf,sizeof(rbuf),0);
- }
- break;
- case's':
- case'S':
- {
- rbuf[3]=rbuf[3]-2;
- if(rbuf[3]<=-90)
- {
- rbuf[3]=90;
- }
- send(cfd,rbuf,sizeof(rbuf),0);
- }
- break;
- case'd':
- case'D':
- {
- bbuf[3]+=2;
- if(bbuf[3]>=180)
- {
- bbuf[3]=180;
- }
- send(cfd,bbuf,sizeof(bbuf),0);
- }
- break;
- case'a':
- case'A':
- {
- bbuf[3]=bbuf[3]-2;
- if(bbuf[3]>=180)
- {
- bbuf[3]=0;
- }
- }
- break;
- }
- }
- close(cfd);
-
- return 0;
- }
- #include <myhead.h>
- #define IP "192.168.126.2"
- #define PORT 69
-
- //定义下载函数
- int do_download(int sfd,struct sockaddr_in sin)
- {
- char pack[516]="";
- //组件协议包:下载请求
- short *p1=pack;
- *p1=htons(1); //设置操作码
-
- char *p2=pack+2;
- char filename[40]="";
- printf("请输入要下载的文件名>>>");
- fgets(filename,sizeof(filename),stdin);
- filename[strlen(filename)-1]=0;
- strcpy(p2,filename);
-
- char *p4=p2+strlen(p2)+1;
- strcpy(p4,"octet"); //模式位
- int packlen=4+strlen(p2)+strlen(p4); //请求包的大小
-
- //向服务器发送请求包
- if(sendto(sfd,pack,packlen,0,(struct sockaddr*)&sin,sizeof(sin))==-1)
- {
- perror("sendto error");
- return -1;
- }
- printf("请求成功\n");
-
-
- //收取服务器发来的数据包
- char rbuf[516]="";
- short *r1=rbuf;
- //创建一个文件
- int fd=-1;
- if((fd=open(filename,O_RDWR|O_CREAT|O_TRUNC,0664))==-1)
- {
- perror("open error");
- return -1;
- }
- printf("fd=%d\n",fd);
- socklen_t socklen=sizeof(sin);
- while(1)
- {
- // printf("111\n");
- bzero(rbuf,sizeof(rbuf));
- int res=recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,&socklen);
- if(*r1==ntohs(3))
- {
- if(write(fd,rbuf+4,res-4)<0)
- {
- perror("write error");
- break;
- }
- *r1=htons(4);
- if(sendto(sfd,rbuf,4,0,(struct sockaddr*)&sin,sizeof(sin))==-1)
- {
- perror("sendto error");
- return -1;
- }
- if(res<516)
- {
-
- printf("下载完毕\n");
- break;
- }else if(rbuf[1]==5)
- {
- printf("download error:%s\n",rbuf+4);
- }
-
- }
-
- }
- close(fd);
- return 0;
- //如果为512,则读取后,回复一个应打包,继续接收下一个
- //如果小于512,则读取数据后,回复一个应打包,结束接收数据
-
- }
-
-
-
- //定义上传函数
- int do_upload(int sfd,struct sockaddr_in sin)
- {
- char pack[516]="";
- //组件协议包:上传请求
- short *p1=pack;
- *p1=htons(2); //设置操作码
-
- char *p2=pack+2;
- char filename[40]="";
- printf("请输入要上传的文件名>>>");
- fgets(filename,sizeof(filename),stdin);
- filename[strlen(filename)-1]=0;
- strcpy(p2,filename);
-
- char *p4=p2+strlen(p2)+1;
- strcpy(p4,"octet"); //模式位
- int packlen=4+strlen(p2)+strlen(p4); //请求包的大小
-
- //向服务器发送请求包
- if(sendto(sfd,pack,packlen,0,(struct sockaddr*)&sin,sizeof(sin))==-1)
- {
- perror("sendto error");
- return -1;
- }
- printf("请求成功\n");
-
- //从linux系统中读取文件,然后发送给服务器
- //以只读的形式打开上传的文件
- int fd1=-1;
- if((fd1=open(filename,O_RDWR))==-1)
- {
- perror("open error");
- return -1;
- }
- printf("fd1=%d\n",fd1);
- socklen_t socklen=sizeof(sin);
-
- //用来读取文件的容器
- char rbuf[516]="";
- short *r1=rbuf; //操作码
- short *r2=rbuf+2; //块编号
- int i=1;
- int len=0; //读取文件的大小
- while(1)
- {
- bzero(rbuf,sizeof(rbuf));
- int res=recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,&socklen);
- if(*r1==ntohs(4))
- {
- bzero(rbuf,sizeof(rbuf));
- len=read(fd1,rbuf+4,512);
- *r2=htons(i); //给块编号赋值
- //把读取文件的内容发送给服务器
- *r1=htons(3); //给操作码赋值
- if(sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,socklen)==-1)
- {
- perror("sendto error");
- return -1;
- }
- i++;
- if(len<512)
- {
- printf("上传完毕\n");
- break;
- }else if(rbuf[1]==5)
- {
- printf("upload error:%s\n",rbuf+4);
- }
-
- }
- }
- close(fd1);
- return 0;
-
- }
-
-
-
- int main(int argc, const char *argv[])
- {
- int sfd=-1;
- if((sfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
- {
- perror("socket error");
- return -1;
- }
- printf("sfd=%d\n",sfd);
-
- struct sockaddr_in sin;
- sin.sin_family=AF_INET;
- sin.sin_port=htons(PORT);
- sin.sin_addr.s_addr=inet_addr(IP);
-
- socklen_t socklen=sizeof(sin);
-
- int menu=0;
- while(1)
- {
- system("clear");
- printf("****************\n");
- printf("*****1.下载*****\n");
- printf("*****2.上传*****\n");
- printf("*****3.退出*****\n");
- printf("****************\n");
- printf("请输入选项:");
- scanf("%d",&menu);
- getchar();
-
- //对菜单多分支选择
- switch(menu)
- {
- case 1:
- {
- //下载功能
- do_download(sfd,sin);
-
- }
- break;
- case 2:
- {
- //上传功能
- do_upload(sfd,sin);
- }
- break;
- case 3:goto END;
- break;
- default:printf("输入错误,请重新输入\n");
- }
- printf("请输入任意键按回车结束\n");
- while(getchar()!='\n');
- }
-
-
- END:
- close(sfd);
-
-
- return 0;
- }