-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathclient.php
executable file
·80 lines (69 loc) · 1.72 KB
/
client.php
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
#!/usr/local/bin/php
<?php
/**
* usage: php upload_client.php -h 127.0.0.1 -p 9507 -f test.jpg
*/
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
$args = getopt("p:h:f:t");
if (empty($args['h']) or empty($args['f']))
{
echo "Usage: php {$argv[0]} -h server_ip -p server_port -f file -t timeout\n";
exit;
}
if (empty($args['p']))
{
$args['p'] = 9507;
}
if (empty($args['t']))
{
$args['t'] = 30;
}
$file = $args['f'];
$size = filesize($file);
if (!is_file($file)) {
die("Error: file '{$args['f']}' not found\n");
}
if (!$client->connect($args['h'], $args['p'], $args['t'], 0)) {
echo "Error: connect to server failed. " . swoole_strerror($client->errCode);
die("\n");
}
$data = array(
'name' => basename($file),
'size' => $size,
);
if (!$client->send(json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\r\n\r\n")) {
die("Error: send header failed.\n");
}
getResponse($client);
echo "Start transport. file={$file}, size={$size}\n";
$fp = fopen($file, 'r');
if (!$fp) {
die("Error: open $file failed.\n");
}
$i = 0;
while(!feof($fp))
{
$read = fread($fp, 8000);
if (!$client->send($read)) {
echo "send failed. ErrCode=".$client->errCode."\n";
break;
}
}
getResponse($client);
echo "Success. send_size = $size\n";
function getResponse(swoole_client $client)
{
$recv = $client->recv();
if (!$recv) {
die("Error: recv header failed.\n");
}
$respCode = json_decode($recv, true);
if (!$respCode) {
die("Error: header json_decode failed.\n");
}
if ($respCode['code'] != 0) {
die("Server: message={$respCode['msg']}.\n");
} else
echo "[FromServer]\t{$respCode['msg']}\n";
return true;
}