1 | function matperfClient_StartExp(varargin) |
---|
2 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
3 | % options : |
---|
4 | % UDP/TCP single |
---|
5 | % UDP/TCP dualtest |
---|
6 | % UDP/TCP tradeoff |
---|
7 | % usage : |
---|
8 | % matperfClient_StartExp('UDP','10.96.94.199','dualtest') |
---|
9 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
10 | |
---|
11 | |
---|
12 | UdpTcp = 0; % UdpTcp is 1 when UDP and it is 2 when TCP |
---|
13 | clear_set; |
---|
14 | |
---|
15 | if strcmp(varargin(1),'UDP'), |
---|
16 | UdpTcp = 1; |
---|
17 | tmp_add = varargin(2); |
---|
18 | elseif strcmp(varargin(1), 'TCP'), |
---|
19 | UdpTcp = 2; |
---|
20 | tmp_add = varargin(2); |
---|
21 | end |
---|
22 | % tells matlab what mode user wants to use. |
---|
23 | if strcmp(varargin(3), 'single'), |
---|
24 | mode = 1; % single |
---|
25 | elseif strcmp(varargin(3), 'dualtest'), |
---|
26 | mode = 2; % dualtest |
---|
27 | elseif strcmp(varargin(3), 'tradeoff'), |
---|
28 | mode = 3; % tradeoff |
---|
29 | else |
---|
30 | return |
---|
31 | end |
---|
32 | |
---|
33 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
34 | % Ask server to generate & accept experiment |
---|
35 | % 0 - experiment request |
---|
36 | % 1 - trial request |
---|
37 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
38 | |
---|
39 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
40 | % In the below while loop, it will generate a udp packet that includese whether |
---|
41 | % the client is in UDP/TCP single, dualtest or trade off mode and asks the |
---|
42 | % server to get ready for the experiment. If the server successfully |
---|
43 | % recognizes the request and be ready, it will send 0 back to the client |
---|
44 | % and matlab gets out of this while loop. |
---|
45 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
46 | udp = pnet('udpsocket', 3333); |
---|
47 | packet = [0; UdpTcp; mode]; % prepares a package |
---|
48 | while(1), |
---|
49 | pnet(udp,'write',packet); |
---|
50 | pnet(udp,'writepacket',char(tmp_add),3333); % sends a packet carrying signal 0. |
---|
51 | pnet(udp,'setreadtimeout',1.2); % wait for the response for 1.2 seconds |
---|
52 | len = pnet(udp,'readpacket'); |
---|
53 | [address] = pnet(udp,'gethost'); |
---|
54 | if len == 0 || len < 0, % if the client does not receive the response |
---|
55 | disp('server not responding...reasking to acknowledge'); |
---|
56 | pnet('closeall'); |
---|
57 | udp = pnet('udpsocket',3333); |
---|
58 | continue; |
---|
59 | elseif len >0, % client has received a response. |
---|
60 | data = pnet(udp,'read',1000,'double'); |
---|
61 | if data == 0, |
---|
62 | disp('server approved experiment request'); |
---|
63 | else |
---|
64 | disp('Wrong Code'); |
---|
65 | continue |
---|
66 | end |
---|
67 | break; |
---|
68 | end |
---|
69 | end |
---|
70 | pnet('closeall'); |
---|
71 | |
---|
72 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
73 | % calling the matperfClient_StartTrial(length, bandwidth, UdpTcp, mode) |
---|
74 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
75 | |
---|
76 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
77 | % if need to define port # % |
---|
78 | % define here % |
---|
79 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
80 | reqport = 5001; % default % |
---|
81 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
82 | % if need to define time # % |
---|
83 | % define here % |
---|
84 | time = 10; % default % |
---|
85 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
86 | oneM = 1024 * 1024; % defined as 1 Mbits |
---|
87 | i = 1; |
---|
88 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
89 | oneWM = 1024 * 8; |
---|
90 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
91 | % when UDP is selected, the client will run the two for loops with |
---|
92 | % different values of bandwidth and length; and it will set the windows |
---|
93 | % value to 0, which is not needed here. |
---|
94 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
95 | if UdpTcp == 1, |
---|
96 | windows = 0; |
---|
97 | for length = [200,1400] |
---|
98 | for bandwidth = linspace(256*1024,oneM * 4,5) |
---|
99 | % for bandwidth = oneM*10 |
---|
100 | tic; |
---|
101 | matperfClient_StartTrial(length, windows, bandwidth, UdpTcp, mode, time,address,reqport) |
---|
102 | nem = sprintf('executed %d trial',i); |
---|
103 | i = i + 1; |
---|
104 | disp(nem); |
---|
105 | toker = toc; |
---|
106 | disp(toker) % Display how much time it took to run a experiment. |
---|
107 | |
---|
108 | |
---|
109 | end |
---|
110 | end |
---|
111 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
112 | % when TCP is selected, length and bandwidth are kept constant and only |
---|
113 | % window value is being changed |
---|
114 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
115 | elseif UdpTcp == 2, |
---|
116 | length = 0; |
---|
117 | bandwidth = 0; |
---|
118 | for windows = linspace(2* oneWM, 216* oneWM, 10) |
---|
119 | matperfClient_StartTrial(length, windows, bandwidth, UdpTcp, mode, time,address,reqport) |
---|
120 | nem = sprintf('executed %d trial',i); |
---|
121 | reqport = reqport + 1; |
---|
122 | i = i + 1; |
---|
123 | disp(nem); |
---|
124 | end |
---|
125 | |
---|
126 | end |
---|
127 | return |
---|