Skip to content

Commit f6f1cb6

Browse files
committed
add transfer (14-4)
1 parent 6a49b87 commit f6f1cb6

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

source/transfer.c

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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+
}

0 commit comments

Comments
 (0)