云盤下載
#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;
}