实现TCP跨主机通信,客户端控制服务器机械臂移动
代码部分:
#include <myhead.h>
#define SERPORT 8888 //服务器端口号
#define SERIP "192.168.115.173" //服务器地址
#define CLIPORT 8888 //客户端端口号
#define CLIIP "192.168.115.157" //客户端地址
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; //使用的是ipv4通信
cin.sin_port = htons(CLIPORT); //客户端的端口号
cin.sin_addr.s_addr = inet_addr(CLIIP); //客户端IP地址
//绑定工作
if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
{
perror("bind error");
return -1;
}
//连接服务器
//填充服务器地址信息结构体
struct sockaddr_in sin;
sin.sin_family = AF_INET; //使用的是ipv4通信
sin.sin_port = htons(SERPORT); //服务器的端口号
sin.sin_addr.s_addr = inet_addr(SERIP); //客户端的端口号
//检测是否连接成功
if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
{
perror("connect error");
return -1;
}
printf("connect success\n");
//提前设置好发送的格式
char buf[] ={0xff,0x02,0x00,0x00,0xff};
char cuf[] ={0xff,0x02,0x01,0x00,0xff};
char key; //作为输入的判断条件
while(1)
{
printf("请输入需要进行的操作(w,s,a,d)");
scanf("%c",&key);
getchar(); //吸收垃圾字符
switch(key)
{
case 'w':
{
buf[3]=buf[3]+10; //每次红色机械臂增加10度
if(buf[3]>0x5A)
{
buf[3] = 0x5A; //最大角度不能超过90度
}
send(cfd,buf,sizeof(buf),0); //发送数据给服务器
};break;
case 's':
{
buf[3]=buf[3]-10; //每次红色机械臂减少10度
if(buf[3]<-0x5A)
{
buf[3] = -0x5A ; //最小角度不能低于-90度
}
send(cfd,buf,sizeof(buf),0);
};break;
case 'a':
{
cuf[3]=cuf[3]-10; //每次蓝色机械臂减少10度
if(cuf[3]<0x00)
{
cuf[3] = 0x00; //最小角度不能低于0度
}
send(cfd,cuf,sizeof(cuf),0); //发送数据给服务器
};break;
case 'd':
{
cuf[3]=cuf[3]+10; //每次蓝色机械臂增加10度
if(cuf[3]>0xB4)
{
cuf[3] = 0xB4; //最大角度不能超过180度
}
send(cfd,cuf,sizeof(cuf),0); //发送数据给服务器
};break;
case 'q':
{
goto A; //退出
};break;
}
}
A:
close(cfd); //关闭客户端套接字
return 0;
}