1.思維導圖
2.TCP機械臂測試
tcpCli.c
#include<myhead.h>
#define SER_IP "192.168.125.162" //服務器IP
#define SER_PORT 7777 //服務器端口#define CLI_IP "192.168.159.144" //客戶端IP
#define CLI_PORT 9999 //客戶端端口號int main(int argc, const char *argv[])
{//1.創建用于通信的套接字文件描述符int cfd=-1;cfd=socket(AF_INET,SOCK_STREAM,0);//參數1:表示使用的是IPv4的通信協議//參數2:表示使用tcp通信類型//參數3:表示前面已經特定了通信協議if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//2.綁定(非必須)//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");return -1;}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); //IP地址//3.2連接服務器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//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':case 'w':{rbuf[3]+=5; //每次操作的角度偏移5度if(rbuf[3]>=90){rbuf[3]=90;}send(cfd,rbuf,sizeof(rbuf),0);}break;case 'S':case 's':{rbuf[3]-=5; //每次操作的角度偏移5度if(rbuf[3]<=-90){rbuf[3]=-90;}send(cfd,rbuf,sizeof(rbuf),0);}break;case 'D':case 'd':{bbuf[3]+=5; //每次操作的角度偏移5度if(bbuf[3]>=180){bbuf[3]=180;}send(cfd,bbuf,sizeof(bbuf),0);}break;case 'A':case 'a':{bbuf[3]-=5; //每次操作的角度偏移5度if(bbuf[3]<=0){bbuf[3]=0;}send(cfd,bbuf,sizeof(bbuf),0);}break;}}//6.關閉套接字close(cfd);return 0;
}