File tree 1 file changed +63
-0
lines changed
1 file changed +63
-0
lines changed Original file line number Diff line number Diff line change
1
+ //
2
+ // transfer.c
3
+ // Algorithms - Network transfer
4
+ //
5
+ // Created by YourtionGuo on 18/05/2017.
6
+ // Copyright © 2017 Yourtion. All rights reserved.
7
+ //
8
+
9
+ #include <sys/types.h>
10
+ #include <sys/socket.h>
11
+
12
+ #include "compress.h"
13
+ #include "transfer.h"
14
+
15
+ #pragma mark - Public
16
+
17
+
18
+ int send_comp (int s , const unsigned char * data , int size , int flags )
19
+ {
20
+ unsigned char * compressed ;
21
+ int size_comp ;
22
+
23
+ /// 压缩数据
24
+ if ((size_comp = huffman_compress (data , & compressed , size )) < 0 ) return -1 ;
25
+
26
+ /// 发送压缩数据及大小
27
+
28
+ if (send (s , (char * )& size_comp , sizeof (int ), flags ) != sizeof (int )) return -1 ;
29
+
30
+ if (send (s , (char * )compressed , size_comp , flags ) != size_comp ) return -1 ;
31
+
32
+ /// 释放已压缩数据
33
+ free (compressed );
34
+
35
+ return 0 ;
36
+ }
37
+
38
+
39
+ int recv_comp (int s , unsigned char * * data , int * size , int flags )
40
+ {
41
+ unsigned char * compressed ;
42
+ int size_comp ;
43
+
44
+ /// 根据数据大小接收压缩数据
45
+
46
+ if (recv (s , (char * )& size_comp , sizeof (int ), flags ) != sizeof (int )) return -1 ;
47
+
48
+ if ((compressed = (unsigned char * )malloc (size_comp )) == NULL ) return -1 ;
49
+
50
+ if (recv (s , (char * )compressed , size_comp , flags ) != size_comp ) {
51
+
52
+ free (compressed );
53
+ return -1 ;
54
+ }
55
+
56
+ /// 解压数据
57
+ if ((* size = huffman_uncompress (compressed , data )) < 0 ) return -1 ;
58
+
59
+ /// 释放收到的压缩数据
60
+ free (compressed );
61
+
62
+ return 0 ;
63
+ }
You can’t perform that action at this time.
0 commit comments