1、机械臂调试
#include <myhead.h>
#define SER_IP "192.168.125.119"//服务器ip
#define SER_PORT 8888//服务器端口号
#define CLI_IP "192.168.125.80"//客户端ip
#define CLI_PORT 9999//客户端端口号
int main(int argc, const char *argv[])
{
int wfd=-1;
//创建套接字
if((wfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("error");
return -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);
if(bind(wfd,(struct sockaddr *)&cin,sizeof(cin))==-1)
{
perror("error");
return -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);
if(connect(wfd,(struct sockaddr *)&sin,sizeof(sin))==-1)
{
perror("error3");
return -1;
}
//数据收发
char rbuf[5]={0xff,0x02,0x00,0x00,0xff};
unsigned char bbuf[5]={0xff,0x02,0x01,0x00,0xff};
//发送给服务器做初始值
send(wfd,rbuf,sizeof(rbuf),0);
sleep(1);
send(wfd,bbuf,sizeof(bbuf),0);
//接收输入的字符
char key=0;
while(1)
{
scanf("%c",&key);
getchar();
switch(key)
{
case 'W':
case 'w':
{
rbuf[3]+=1;
if(rbuf[3]>=90)
{
rbuf[3]=90;
}
send(wfd,rbuf,sizeof(rbuf),0);
}
break;
case 'S':
case 's':
{
rbuf[3]-=1;
if(rbuf[3]<=-90)
{
rbuf[3]=-90;
}
send(wfd,rbuf,sizeof(rbuf),0);
}
break;
case 'D':
case 'd':
{
bbuf[3]+=1;
if(bbuf[3]>=180)
{
bbuf[3]=180;
}
send(wfd,bbuf,sizeof(bbuf),0);
}
break;
case 'A':
case 'a':
{
bbuf[3]-=1;
if(bbuf[3]<=0)
{
bbuf[3]=0;
}
send(wfd,bbuf,sizeof(bbuf),0);
}
break;
}
}
//关闭套接字
close(wfd);
return 0;
}
2、基于udp的tftp文件传输
#include<myhead.h>
#define SER_IP "192.168.1.4" //服务器IP
#define SER_PORT 69 //服务器端口号
int main(int argc, const char *argv[])
{
printf("\t\t***1、下载***\n");
printf("\t\t***1、上传***\n");
printf("\t\t***1、退出***\n");
int key;
printf("please enter your choice:\n");
scanf("%d",&key);
//1、创建用于通信的套接字
int cfd = socket(AF_INET, SOCK_DGRAM, 0);
if(cfd == -1)
{
perror("socket error");
return -1;
}
printf("cfd = %d\n", cfd); //3
//2、绑定IP地址和端口号(非必须)
//3、收发数据
char pack[516] = "";
//定义容器,记录服务器的地址信息结构体
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SER_PORT);
sin.sin_addr.s_addr = inet_addr(SER_IP);
switch(key)
{
case 1:
{
// printf("111\n");
//组件协议包:下载请求
short *p1 = (short*)pack;
*p1 = htons(1); //设置操作码
strcpy(pack+2, "5.png"); //文件名
strcpy(pack+2+strlen("5.png")+1, "octet"); //模式位
int packlen = 2+strlen("5.png")+1+strlen("octet")+1; //请求包的大小
//向服务器发送请求包
sendto(cfd, pack, packlen, 0, (struct sockaddr*)&sin, sizeof(sin));
//定义数据包
char str[516]="";
//定义存储目标文件
int wfd=-1;
if((wfd=open("5.png",O_RDWR|O_CREAT,0664))==-1)
{
perror("open error");
return -1;
}
while(1)
{
//收取服务器发来的数据包
socklen_t sin_len=sizeof(sin);
int res=recvfrom(cfd,str,sizeof(str),0,(struct sockaddr*)&sin,&sin_len);
short *r=(short *)str;
//判断数据包的操作码是否为3 以及 数据包数据内容是否为512
if(*r==3)
{
write(wfd,str+4,res-4);
//定义应答包
char ACK[4]="";
short *q1=(short *)ACK;
*q1=htons(4);
short *q2=q1+1;
*q2=*(str+2);
//如果为512,则读取后,回复一个应打包,继续接收下一个
if(res==516)
{
sendto(cfd,ACK,sizeof(str),0,(struct sockaddr*)&sin,sizeof(sin));
}
//如果小于512,则读取数据后,回复一个应打包,结束接收数据
if(res<516)
{
sendto(cfd,ACK,sizeof(str),0,(struct sockaddr*)&sin,sizeof(sin));
break;
}
}
if(*r==5)
{
printf("%s\n",str);
break;
}
}
close(wfd);
}
break;
case 2:
{
//组件协议包:上传请求
short *k1 = (short*)pack;
*k1 = htons(2); //设置操作码
strcpy(pack+2, "123.c"); //文件名
strcpy(pack+2+strlen("123.c")+1, "octet"); //模式位
int packlen = 2+strlen("123.c")+1+strlen("octet")+1; //请求包的大小
//向服务器发送请求包
sendto(cfd, pack, packlen, 0, (struct sockaddr*)&sin, sizeof(sin));
//定义数据包
char str1[516]="";
//定义上传目标文件
int wfd2=-1;
if((wfd2=open("123.c",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
//定义读取的数组
char str2[512]="";
short i=1;
while(1)
{
bzero(str2,sizeof(str2));
read(wfd2,str2,sizeof(str2));
short *s=(short *)str1;
*s=htons(3);
*(s+1)=htons(i);
i++;
memcpy(str1+4,str2,strlen(str2));
int len=strlen(str1)-2;
if(len==512)
{
sendto(cfd,str1,sizeof(str1), 0, (struct sockaddr*)&sin, sizeof(sin));
}
else if(len<512)
{
sendto(cfd,str1,len+2, 0, (struct sockaddr*)&sin, sizeof(sin));
}
//定义应答包
char ACK[4]="";
short *q1=(short *)ACK;
*q1=htons(4);
short *q2=q1+1;
*q2=*(str1+2);
}
}
break;
case 3:
{
printf("已结束\n");
return 0;
}
break;
}
//4、关闭套接字
close(cfd);
return 0;
}