source: Sophya/trunk/AddOn/TAcq/tsok.cc@ 4012

Last change on this file since 4012 was 3907, checked in by ansari, 15 years ago

Ajout script verification donnees firmware FFT-shrink, Reza 05/11/2010

File size: 8.7 KB
RevLine 
[3542]1#include <stdio.h>
2#include <stdlib.h>
[3639]3#include <string.h>
[3542]4#include <math.h>
5#include <iostream>
6
7#include "sopnamsp.h"
8#include "array.h"
9#include "tarrinit.h"
10#include "timing.h"
11#include "ctimer.h"
12#include "swrapsock.h"
13#include "sockrawstream.h"
14#include "burawstream.h"
15
16// Numero de port pour la connection IP
17#define PORTID 1962
18
19void burawtst();
[3907]20int serverside(const char* adr=NULL);
[3544]21int clientside(string& servname, string& msg, string& args);
[3542]22
[3544]23static size_t RIOS_NPAQ = 16;
24
25//---------------------------------------------------------------------------
26// main program de test des classes socket - R. Ansari 2005-2008
27//---------------------------------------------------------------------------
[3542]28int main(int narg, char *arg[])
29{
30 cout << " ---- Programme tsok.cc - Test classes Socket --- " << endl;
31 if (narg < 2) {
32 cout << " Erreur Argument / tsok.cc : Socket class tests \n"
[3907]33 << " Usage : tsok S/s/C [servername=localhost] [OPEMsg=Hello] [NLoop,SizeX,SizeY] [RIOS_NPaq=16]\n"
[3542]34 << " Ex: tsok S or tsok C serverName or \n"
[3544]35 << " tsok C serverName PPFSOCKET 5,1000,800 \n"
[3907]36 << " S/s : run tsok as server side, (S: specify ServerSocket In_Adress) \n"
[3542]37 << " C : run tsok as client side \n"
38 << " OPEMsg : Operation select on client side (=XXX , PPFSOCKET , STOP) \n"
39 << " serverName : Name or IP adress of the machine where tsok S is running \n"
40 << " NLoop,SizeX,SizeY: Number of transfers, 2D array size for OPEMsg=PPFSOCKET \n" << endl;
41 return 1;
42 }
43 bool fgserv = false;
[3907]44 bool fginadr = false;
45 if (*arg[1] == 's') fgserv = true;
46 else if (*arg[1] == 'S') { fgserv=true; fginadr=true; }
[3542]47 string servname = "localhost";
48 if (narg > 2) servname = arg[2];
49 string opemsg = "Hello";
50 if (narg > 3) opemsg = arg[3];
51 string oargs = "1,100,50";
52 if (narg > 4) oargs = arg[4];
[3544]53 if (narg > 5) RIOS_NPAQ = atol(arg[5]);
[3542]54
[3544]55 int rc = 0;
[3542]56 try {
57 SophyaInit();
58 InitTim();
[3907]59 if (fgserv) {
60 if (fginadr) rc=serverside(servname.c_str());
61 else rc=serverside();
62 }
[3544]63 else if (*arg[1] == 'C') rc=clientside(servname, opemsg, oargs);
[3542]64 else burawtst();
65 }
66 catch(PThrowable exc ) {
67 cerr << "tsok-main() , Catched exception: \n" << exc.Msg() << endl;
[3544]68 rc=97;
[3542]69 }
70 catch(std::exception ex) {
71 cerr << "tsok-main() , Catched std::exception " << (string)(ex.what()) << endl;
[3544]72 rc=98;
[3542]73 }
74 catch(...) {
75 cerr << "tsok-main() , Catched ... ! " << endl;
[3544]76 rc=99;
[3542]77 }
[3544]78 cout << " --------- End of tsok.cc Rc=" << rc << " ---------------- " << endl;
[3542]79}
80
81
82/* --Fonction-- */
[3907]83int serverside(const char* adr)
[3542]84{
[3544]85 int rc = 66;
[3542]86 cout << " ======== tsok.cc / ServerSide ============ " << endl;
[3907]87 if (adr !=NULL) cout << " Creating server socket InAddress=" << adr << ", PortId= " << PORTID << endl;
88 else cout << " Creating server socket ... , PortId= " << PORTID << endl;
89 ServerSocket srv(adr, PORTID, 1);
[3542]90 bool fgstop = false;
91 int nc = 0;
92 while (!fgstop) {
93 cout << " Waiting for client connection ... nc=" << nc << endl;
94 Socket skt = srv.WaitClientConnection();
95 nc ++;
96 cout << " Connection established ... nc = " << nc << endl;
97 bool fgbye = false;
98 while (! fgbye) {
99 char buff[256];
100 for(int i=0; i<255; i++) buff[i] = '\0';
101 size_t l = skt.Receive(buff, 256);
102 buff[255] = '\0';
103 cout << "Rcv/len=" << l << "Msg=" << buff << endl;
104 if (l < 1) fgbye = true;
105 else if (strncmp(buff,"STOP",4) == 0) fgstop = true;
106 else if (strncmp(buff,"BYE",3) == 0) fgbye = true;
107 else if (strncmp(buff,"PPFSOCKET", 9) == 0) {
108 int nloop = 1;
109 int sx = 100;
110 int sy = 100;
111 sscanf(buff+10,"%d,%d,%d",&nloop, &sx, &sy);
112 cout << " ServerSide: Test SocketStream NLoop= " << nloop
113 << " Sx= " << sx << " Sy=" << sy << endl;
114 Timer tm("tsok/Server");
115 size_t totnkb = 0;
116 for(int kl=0; kl<nloop; kl++) {
117 ostringstream oss;
118 oss << " ServerSide/PPFSocket[" << kl <<"]";
119 tm.Split(oss.str().c_str());
120// tm.Split("Server/StartRead");
121 TMatrix<int_4> mx;
122 // cout << " waiting ... sleep(1) " << endl;
123 // sleep(1);
124 {
[3544]125 RawInOutSocketStream sstr(skt, RIOS_NPAQ);
[3542]126 PInPersist pis(&sstr, false, false);
127 pis.GetObject(mx);
128 }
129 if (kl%5 == 0) mx.Show() ;
130 for(sa_size_t ir=0; ir<mx.NRows(); ir++)
131 mx.Row(ir) += (int_4)(ir+3);
132 {
133 // cout << " --- writing back modified mx to socket stream ... " << endl;
[3544]134 RawInOutSocketStream sstr(skt, RIOS_NPAQ);
[3542]135 POutPersist pos(&sstr, false);
136 pos.PutObject(mx);
137 }
138 tm.Split("WriteBackDone");
139 float tmillis = tm.PartialElapsedTime()*1000.;
140 if (tmillis < 1.e-5) tmillis = 1e-5;
141 cout << "ServerSide-Rate=" << 2.*(float)(mx.Size()*4)/tmillis << " kbytes/sec" << endl;
142 totnkb += 2*mx.Size()*4/1000;
143
144 } // fin boucle kl->nloop
145
146 float ttms = tm.TotalElapsedTime();
147 if (ttms < 1.e-6) ttms = 1e-6;
148 cout << " ===> Server/PPFSocket-MeanRate= " << (float)totnkb/ttms << " kbytes/sec" << endl;
149 } // fin if(PPFSOCKET)
150 } // fin while(! fgbye)
151 cout << "ServerSide: Closing current socket ..." << endl;
[3907]152 skt.Close();
[3544]153 rc = 0;
[3542]154 } // fin while(!fgstop)
155 cout << " ======= End of tsok.cc / ServerSide ======== " << endl;
[3544]156 return rc;
[3542]157}
158
159/* --Fonction-- */
[3544]160int clientside(string& servname, string& msg, string& args)
[3542]161{
[3544]162 int rc = 77;
[3542]163 cout << " ======== tsok.cc / ClientSide ============ " << endl;
164 cout << " ServerName= " << servname << " OpeMsg= " << msg << endl;
165 cout << " Creating client socket ServerName= " << servname << endl;
166 ClientSocket cli(servname, PORTID);
167 char buff[256];
168 string maa = msg;
169 if (msg == "PPFSOCKET") { maa += ' '; maa += args; }
170 strncpy(buff, maa.c_str(), 255);
171 buff[255] = '\0';
172 cout << " Sending Message : " << buff << endl;
173 cli.Send(buff, 256);
[3544]174 rc = 0;
[3542]175 if (msg == "PPFSOCKET") {
[3544]176 rc = 7;
[3542]177 int nloop = 1;
178 int sx = 100;
179 int sy = 100;
180 sscanf(args.c_str(),"%d,%d,%d",&nloop, &sx, &sy);
181 cout << " ClientSide: Test SocketStream NLoop= " << nloop
182 << " Sx= " << sx << " Sy=" << sy << endl;
183 Timer tm("tsok/Client");
184 size_t totnkb = 0;
185 int npb = 0;
186 for(int kl=0; kl<nloop; kl++) {
187 ostringstream oss;
188 oss << "ClientSide/PPFSocket[" << kl <<"]";
189 tm.Split(oss.str().c_str());
190// tm.Split("Client/StartSend");
191 TMatrix<int_4> mx(sy, sx);
192 // cout << " waiting ... sleep(1) " << endl;
193 mx = RandomSequence(RandomSequence::Flat, 50, 10);
194 {
195 // cout << " --- writing mx to socket stream ... " << endl;
[3544]196 RawInOutSocketStream sstr(cli, RIOS_NPAQ);
[3542]197 POutPersist pos(&sstr, false);
198 pos.PutObject(mx);
199 }
200 TMatrix<int_4> mxr;
201 {
[3544]202 RawInOutSocketStream sstr(cli, RIOS_NPAQ);
[3542]203 PInPersist pis(&sstr, false, false);
204 pis.GetObject(mxr);
205 }
206 if (kl%5==0) mxr.Show();
207 for(sa_size_t ir=0; ir<mx.NRows(); ir++) {
208 mxr.Row(ir) -= (int_4)(ir+3);
209 mxr.Row(ir) -= mx.Row(ir);
210 }
211 // Check for correct return matrix
212 int_4 rmin, rmax;
213 mxr.MinMax(rmin, rmax);
214 if ((rmin!=0) || (rmax!=0)) npb++;
215 cout << " ClientSide/CheckReturnMinMax=" << rmin << "," << rmax << endl;
216 tm.Split("ReadCheckDone");
217 float tmillis = tm.PartialElapsedTime()*1000.;
218 if (tmillis < 1.e-5) tmillis = 1e-5;
219 cout << "ClientSide-Rate=" << 2.*(float)(mx.Size()*4)/tmillis << " kbytes/sec" << endl;
220 totnkb += 2*mx.Size()*4/1000;
221 }
222 cout << "ClientSide/End of PPFSocket NPb-Check-returnMatrix=" << npb << " /NLoop=" << nloop << endl;
[3544]223 if (npb==0) rc=0;
224 else rc=70;
[3542]225 float ttms = tm.TotalElapsedTime();
226 if (ttms < 1.e-6) ttms = 1e-6;
227 cout << " ===> MeanRate= " << (float)totnkb/ttms << " kbytes/sec" << endl;
228 }
229 strncpy(buff, "BYE", 255);
230 cout << " Sending Message : " << buff << endl;
231 cli.Send(buff, 256);
232 cout << " ======= End of tsok.cc / ClientSide ======== " << endl;
[3544]233 return rc;
[3542]234}
235
236
237/* --Fonction-- */
238void burawtst()
239{
240 cout << " --------- burawtst() ------------ " << endl;
241 {
242 char buff[10000];
243 for(int k=0; k<10000; k++) buff[k] = k%256;
244 RawInOutBuffStream sstr("xxx.str");
245 for(int i=1; i<10; i++) {
246 cout << "Appel RawInOutBuffStream.write(s, " << i*650 << endl;
247 sstr.write(buff, i*650);
248 }
249 }
250 Matrix mx(8,6);
251 mx = RegularSequence();
252 cout << mx;
253 {
254 cout << " --- writing mx to buff stream ... " << endl;
255 RawInOutBuffStream sstr("ftsok.str");
256 POutPersist pos(&sstr, false);
257 pos.PutObject(mx);
258 }
259 {
260 cout << " --- writing mx to file ... " << endl;
261 POutPersist pos("ftsok.ppf");
262 pos.PutObject(mx);
263 }
264
265 cout << " --------- FIN-burawtst() ------------ " << endl;
266
267}
Note: See TracBrowser for help on using the repository browser.