1.
代码:
1 #include<myhead.h>
2 #define SER_PORT 69
3 #define SER_IP "192.168.125.197"
5 int main(int argc, const char *argv[])
6 {
7 //1、创建用于通信的套接字文件描述符
8 int cfd = socket(AF_INET, SOCK_DGRAM, 0);
9 if(cfd == -1)
10 {
11 perror("socket error");
12 return -1;
13 }
14
15 //2、绑定(可选)
16
17 //3、填充服务器的地址信息结构体
18 struct sockaddr_in sin;
19 sin.sin_family = AF_INET;
20 sin.sin_port = htons(SER_PORT);
21 sin.sin_addr.s_addr = inet_addr(SER_IP);
22
23 //向服务器发送下载请求
24 char buf[512] = "";
25 socklen_t socklen=sizeof(sin);
26
27 //组装请求数据
28 short *p1 = (short *)buf;
29 *p1 = htons(1);
30
31 char *p2 = buf+2;
32 strcpy(p2, "5.png");
33
34 char *p3 = p2+strlen(p2)+1;
35 strcpy(p3, "octet");
36
37 int len = 4+strlen(p2) + strlen(p3); //要发送的长度
38
39 //向服务器发送请求
40 int res=sendto(cfd, buf, len, 0, (struct sockaddr*)&sin, sizeof(sin));
41 if(res==-1)
42 {
43 perror("sendto error");
44 return -1;
45 }
46
47
48 while(1)
49 {
50 res=recvfrom(cfd,buf,4,0,(struct sockaddr*)&sin, &socklen);
51 if(res==-1)
52 {
53 perror("recvfrom error");
54 return -1;
55 }
56 if (res==4)
57 {
58 res=sendto(cfd,buf,516,0,(struct sockaddr*)&sin,sizeof(sin));
59 if(res==-1)
60 {
61 perror("sendto error");
62 return -1;
63 }
64 if(strcmp(buf,"quit")==0)
65 break;
66 }
67 }
68
69
70 //5、关闭套接字
71 close(cfd);
72
73
74 return 0;
75 }
运行结果: