機械臂:?
#include<myhead.h>
#define SER_IP "192.168.126.2"
#define SER_PORT 8888#define CLI_IP "192.168.252.165"
#define CLI_PORT 9999int 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;
}
tftp:
#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;
}