TCP机械臂测试:
1 #include <head.h>
2
3
4 #define PORT 8888 //服务器端口号,是2字节整数
5 #define IP "192.168.125.104" //服务器ip地址
6 int main(int argc, const char *argv[])
7 {
8 //1.创建套接字
9 int sfd=-1;
10 //功能:创建一个支持TCP通信的套接字
11 //socket(通信域,通信类型,通信协议)
12 if ((sfd=socket(AF_INET,SOCK_STREAM,0))==-1)
13 {
14 perror("socket error");
15 return -1;
16 }
17
18 printf("sfd=%d\n",sfd);
19 //2.1填充地址信息结构体
20 struct sockaddr_in sin;
21 sin.sin_family=AF_INET;//地址组
22 sin.sin_port=htons(PORT);//端口号
23 sin.sin_addr.s_addr=inet_addr(IP);//IP地址
24 //连接服务器
25 if (connect(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
26 {
27 perror("connect error");
28 return -1;
29 }
30
31 char rbuf[5]={0xff,0x02,0x00,0,0xff};//-90~90
32 unsigned char bbuf[5]={0xff,0x02,0x01,90,0xff};//0~180
33 while(1)
34 {
35 char c=fgetc(stdin);
36 getchar();
37 if (c=='W'||c=='w')
38 {
39 rbuf[3]=rbuf[3]+5;
40 if (rbuf[3]>90)
41 {
42 rbuf[3]=90;
43 }
44 send(sfd,rbuf,sizeof(rbuf),0);
45 }
46 else if (c=='S'||c=='s')
47 {
48 rbuf[3]=rbuf[3]-5;
49 if (rbuf[3]<-90)
50 {
51 rbuf[3]=-90;
52 }
53 send(sfd,rbuf,sizeof(rbuf),0);
54 }
55 else if (c=='D'||c=='d')
56 {
57 bbuf[3]=bbuf[3]+10;
58 if (bbuf[3]>180)
59 {
60 bbuf[3]=180;
61 }
62 send(sfd,bbuf,sizeof(bbuf),0);
63 }
64 else if(c=='A'||c=='a')
65 {
66 if (bbuf[3]<10)
67 {
68 bbuf[3]=0;
69 }
70 else
71 {
72 bbuf[3]=bbuf[3]-10;
73 }
74 send(sfd,bbuf,sizeof(bbuf),0);
75
76 }
77 else
78 {
79 printf("input error\n");
80 }
81
82 }
83 close(sfd);
84 return 0;
85 }
~
~
~
tftp协议:
1 #include<head.h>
2
3 //实现下载功能
4 int do_download(int cfd, struct sockaddr_in sin)
5 {
6 //定义变量存储下载请求包
7 char buf[516] = "";
8 //定义变量存储文件名
9 char fileName[40] = "";
10
11 printf("请输入文件名:");
12 scanf("%s", fileName);
13 getchar();
14
15 //组装请求包
16 short *p1 = (short *)buf;
17 *p1 = htons(1); //表明要下载
18
19 char *p2 = buf+2; //文件名段
20 strcpy(p2, fileName);
21
22 char *p4 = p2+strlen(p2)+1; //模式段
23 strcpy(p4, "octet");
24
25 int size = 4 + strlen(p2) + strlen(p4); //要发送数据的大小
26
27 //向服务器发送下载请求
28 if(sendto(cfd, buf, size, 0, (struct sockaddr*)&sin, sizeof(sin)) == -1)
29 {
30 perror("sendto error");
31 return -1;
32 }
33
34 printf("请求成功\n");
35 struct sockaddr_in newsin;
36 socklen_t socklen=sizeof(newsin);
37
38 int res=-1;
39
40 int fd=-1;
41 if ((fd=open(fileName,O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
42 {
43 perror("open error");
44 return -1;
45 }
46
47 //循环接收回复服务器发来的消息
48 while(1)
49 {
50 //服务器回复
51 if((res=recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&newsin,&socklen))==-1)
52 {
53 perror("sendto error");
54 return -1;
55
56 }
57 if (ntohs(*p1)==3)
58 {
59 buf[1]=4;
60 sendto(cfd,buf,4,0,(struct sockaddr*)&newsin,sizeof(newsin));
61 write(fd,buf+4,res-4);
62 }
63 else if (ntohs(*p1==5))
64 {
65 printf("error\n");
66 return -1;
67 }
68 if (res<516)
69 {
70 printf("copy is over\n");
71 break;
72 }
73 }
74 close(cfd);
75
76 }
77
78
79 int main(int argc, const char *argv[])
80 {
81 if(argc != 2)
82 {
83 printf("input error\n");
84 printf("usage:./a.out ip\n");
85 return -1;
86 }
87
88 //1、创建套接字
89 int cfd = socket(AF_INET, SOCK_DGRAM, 0);
90 if(cfd == -1)
91 {
92 perror("socket error");
93 return -1;
94 }
95
96 //2、填充服务器地址信息结构体
97 struct sockaddr_in sin;
98 sin.sin_family = AF_INET;
99 sin.sin_port = htons(69);
100 sin.sin_addr.s_addr = inet_addr(argv[1]);
101
102 int mune = -1;
103 while(1)
104 {
105 system("clear"); //清屏
106 printf("\t\t======1、下载=======\n");
107 printf("\t\t======2、上传=======\n");
108 printf("\t\t======0、退出=======\n");
109
110 printf("请输入功能:");
111 scanf("%d", &mune);
112 getchar();
113
114 //多分支选择
115 switch(mune)
116 {
117 case 1:
118 {
119 do_download(cfd, sin);
120 }
121 break;
122
123 case 2:
124 {
125 //do_upload();
126 }
127 break;
128 case 0:
129 goto POS;
130 default:printf("输入功能有误,请重新输入\n");
131 }
132
133 //阻塞
134 printf("输入任意键,按回车清空:");
135 while(getchar() != '\n');
136
137 }
138
139 POS:
140 //关闭套接字
141 close(cfd);
142
143
144 return 0;
145 }
146
~
~