作业要求:
通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂
程序代码:
#include<myhead.h>
#define SER_IP "192.168.126.12" //服务器ip
#define SER_PORT 8888 //服务器端口号#define CLI_IP "192.168.244.140" //客户端IP
#define CLI_PORT 9999 //客户端端口号int main(int argc, const char *argv[])
{//1.创建用于通信的套接字文件描述符int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n",cfd);//2.绑定(非必须)//填充地址信息结构体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("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){system("stty -icanon");key = getchar();//scanf("%c",&key); //键盘输入一个字符//getchar(); //吸收回车switch(key){//操作红色臂角度增大,范围不大于90case 'w':case 'W':{rbuf[3]+=1; //每次操作的角度偏移一度if(rbuf[3]>90){rbuf[3] = 90;}send(cfd,rbuf,sizeof(rbuf),0);}break;//操作红色臂角度减小,范围不小于-90case 's':case 'S':{rbuf[3]-=1; if(rbuf[3]<-90){rbuf[3] = -90;}send(cfd,rbuf,sizeof(rbuf),0);}break;//操作蓝色臂角度增大,范围不大于180case 'd':case 'D':{bbuf[3]+=1; if(bbuf[3]>180){bbuf[3] = 180;}send(cfd,bbuf,sizeof(bbuf),0);}break;//操作蓝色臂角度减小,范围不小于0case 'a':case 'A':{bbuf[3]-=1; if(bbuf[3]<0){bbuf[3] = 0;}send(cfd,bbuf,sizeof(bbuf),0);}break;}}//5.关闭套接字close(cfd);return 0;
}
运行结果: