客户端使用sendto
服务器端使用recv
UDP要想用send需要先使用connect
客户端代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <string.h> #include <netinet/in.h> #include <errno.h> #include <memory.h> #include <stdlib.h> //for malloc #define BUFFER_SIZE 1024 int main() { int sockcd; struct sockaddr_in server; char recv[4096],send1[4096]; char filepath[100];//file to translate FILE *fp; int lenpath; //filepath length char *buffer;//file buffer int fileTrans; buffer = (char *)malloc(sizeof(char)*BUFFER_SIZE); bzero(buffer,BUFFER_SIZE); //memset(buffer,0,sizeof(buffer)); if((sockcd = socket(AF_INET,SOCK_DGRAM,0))<0) { printf("socket build error!n"); } memset(&server,0,sizeof(server)); server.sin_family= AF_INET; server.sin_port = htons(9999); if(inet_pton(AF_INET,"192.168.61.143",&server.sin_addr)<0) { printf("inet_pton error!n"); } while(1) { printf("input filepath:n"); //memset(filepath,'',sizeof(filepath)); scanf("%s",filepath);//get filepath lenpath = sendto(sockcd,filepath,sizeof(filepath),0,(struct sockaddr*)&server,sizeof(server)); //lenpath = send(sockcd,filepath,strlen(filepath),0);// put file path to sever if(lenpath<0) { printf("filepath send error!n"); } fp = fopen(filepath,"r");//opne file sleep(3); while((fileTrans = fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0) { printf("fileTrans =%dn",fileTrans); if(sendto(sockcd,buffer,fileTrans,0,(struct sockaddr*)&server,sizeof(server))<0) { printf("send failed!n"); break; } bzero(buffer,BUFFER_SIZE); //memset(buffer,0,sizeof(buffer)); } fclose(fp); } close(sockcd); return 0; }
服务器端代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <string.h> #include <netinet/in.h> #include <errno.h> #include <memory.h> #include <stdlib.h> //for malloc #define BUFFER_SIZE 1024 int main() { int sockcd; struct sockaddr_in server; char recv1[4096],send1[4096]; char filename[100]; char filepath[100]; char *buffer;//file buffer int fileTrans; buffer = (char *)malloc(sizeof(char)*BUFFER_SIZE); bzero(buffer,BUFFER_SIZE); //memset(buffer,0,sizeof(buffer)); int lenfilepath; FILE *fp; int writelength; if((sockcd = socket(AF_INET,SOCK_DGRAM,0))<0) { printf("socket build error!n"); } memset(&server,0,sizeof(server)); server.sin_family= AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(9999); if((bind(sockcd,(struct sockaddr*)&server,sizeof(server)))==-1) { printf("bind error!n"); } while(1) { //printf("client IP: %dn",ntohl(client.sin_addr.s_addr)); //printf("client PORT: %dn",ntohs(client.sin_port)); memset(filename,'',sizeof(filename)); memset(filepath,'',sizeof(filepath)); lenfilepath = recv(sockcd,filepath,100,0); printf("filepath :%sn",filepath); if(lenfilepath<0) { printf("recv error!n"); } else { int i=0,k=0; for(i=strlen(filepath);i>=0;i--) { if(filepath[i]!='/') { k++; } else break; } strcpy(filename,filepath+(strlen(filepath)-k)+1); } printf("filename :%sn",filename); fp = fopen(filename,"w"); if(fp!=NULL) { while(fileTrans =recv(sockcd,buffer,BUFFER_SIZE,0)) { if(fileTrans<0) { printf("recv error!n"); break; } writelength = fwrite(buffer,sizeof(char),fileTrans,fp); if(writelength <fileTrans) { printf("write error!n"); break; } bzero(buffer,BUFFER_SIZE); //memset(buffer,0,sizeof(buffer)); } printf("recv finished!n"); fclose(fp); } } close(sockcd); return 0; }
最后
以上就是结实刺猬最近收集整理的关于LINUX下实现UDP传输文件的全部内容,更多相关LINUX下实现UDP传输文件内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复