-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
127 lines (108 loc) · 3.13 KB
/
main.js
File metadata and controls
127 lines (108 loc) · 3.13 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
var dgram = require('dgram')
var settings = {
'mode': '',
'amount': 100,
'server_ip': '127.0.0.1',
'client_ip': '127.0.0.1',
'server_port': 1234,
'client_port': 1235,
'size': 1000
}
process.argv.forEach(function (val, index) {
if(val == '--client') {
settings.mode = 'client'
} else if(val == '--server'){
settings.mode = 'server'
}
if(settings.mode == 'client') {
if(index == 3){
settings.server_ip = val
} else if(index == 4) {
settings.amount = val
} else if(index == 5) {
if(val < 64) {
console.log('Too small packet size (at least 64 bytes)')
process.exit(1)
} else if(val > 65001) {
console.log('To big packet size (maximum = 65000 bytes)')
}
settings.size = val
}
}
});
function whileSend(){
var message = new Buffer(parseInt(settings.amount));
client.send(message, 0, message.length, settings.server_port, settings.server_ip, function(err, size) {
return whileSend()
})
}
if(settings.mode == 'client') {
console.log('Client started')
var client = dgram.createSocket("udp4");
var timer = 0;
var msg = new Buffer(JSON.stringify({'amount' : settings.amount }));
client.on("listening", function () {
console.log('Client started listening')
client.send(msg, 0, msg.length, settings.server_port, settings.server_ip, function(){
console.log('Send settings to server')
})
});
client.on('message', function(msg){
console.log('Got message from server')
try {
obj = JSON.parse(msg.toString())
} catch(e) {
}
if(typeof(obj) == 'object') {
if(obj.done) {
console.log(settings.amount + ' packets sent in ' + timer + ' ms')
var total = settings.amount * settings.size;
var totalSizeSecond = Math.round(((total * 0.0009765625)/(timer/1000)))
console.log( totalSizeSecond + ' Kb/s (' + Math.round((totalSizeSecond * 0.009765625)) + ' Mb/s)')
process.exit(code=0)
}
if(obj.ready) {
console.log('Got ready to send from server')
timer = 0;
setInterval(function(){ timer++ },1)
whileSend()
console.log('Sending packets, please wait...');
}
}
})
client.bind(settings.client_port);
}
if(settings.mode == 'server') {
var packets = 0;
var server = dgram.createSocket("udp4");
server.on("message", function (msg, rinfo) {
if(rinfo.size > 60) {
console.log('Got a packet with size: ' + rinfo.size);
packets++;
console.log(packets)
console.log(settings.amount)
if(packets >= settings.amount) {
var buf = new Buffer(JSON.stringify({'done': true}));
server.send(buf, 0, buf.length, settings.client_port, settings.client_ip)
}
} else {
try {
setting = JSON.parse(msg.toString())
} catch(e) {
}
if(typeof(setting) == 'object') {
console.log('Got settings from client')
settings.amount = setting.amount
packets = 0
settings.client_ip = rinfo.address
console.log('Send ready to send to client')
var buf = new Buffer(JSON.stringify({'ready': true}));
server.send(buf, 0, buf.length, settings.client_port, settings.client_ip)
}
}
});
server.on("listening", function () {
console.log('Server started listening')
});
server.bind(settings.server_port);
}