-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathclient_server.cnet
60 lines (47 loc) · 1.29 KB
/
client_server.cnet
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
struct conn{
string serv_addr;
int port;
string req_fname;
file f;
socket sock;
};
void cleanup(struct conn client_conn)
{
delete client_conn.sock;
delete client_conn.f;
delete client_conn;
return;
}
void print_conn_details(struct conn s_conn)
{
stdout.writeln("Connecting to host: " + s_conn.serv_addr
+ "\nPort " + soi(s_conn.port));
stdout.writeln("Requesting " + s_conn.req_fname);
stdout.writeln("Protocol : HTTP/1.0");
return;
}
string req_line(string host, string fname){
return "GET " + fname + " HTTP/1.0\r\n"
+ "Host: " + host + "\r\n\r\n";
}
int main(string [] args)
{
if (args.alength() != 5){
stdout.writeln("usage: " + args[0] + " <server-addr> <server-port> <req-filename> <output-filename>");
return -1;
}
struct conn s_conn = new struct conn;
/* Parsing connection details */
s_conn.serv_addr = args[1];
s_conn.port = args[2].toint();
s_conn.req_fname = args[3];
print_conn_details(s_conn);
/* Making request to host server */
s_conn.sock = nopen(s_conn.serv_addr, s_conn.port, "tcp", "connect");
s_conn.sock.writeln(req_line(s_conn.serv_addr, s_conn.req_fname));
/* Reading from conn socket and writing to local file*/
s_conn.f = fopen(args[4], "wb");
s_conn.f.writeln(s_conn.sock.readall());
cleanup(s_conn);
return 0;
}