>
Poslusaj ljude, nemoj da odgovaras sa "ni da pipne"....
Evo ti kod sa komentarima pa ces ukapirati sta se desava:
*
Socket clientSocket=new Socket(host,port);
OutputStream os=clientSocket.getOutputStream();
InputStream is=clientSOcket.getInputStream();
PrintWriter out=new PrintWriter(os);
BufferedReader in=new BufferedReader(new InputStreamReader(is));
// Klijent sada upisuje i flushuje poruku, tj kako si rekao XML.
Pretpostavimo da taj xml ima vise od jedne linije
out.write(msg);
// Ovde se stream flushuje i to je dobro.
out.flush();
// Na jos uvek otvorenom socket-u klijent sad ceka da mu server vrati neku
poruku (liniju)
String ack=in.readLine();
*
server
*
ServerSocket serverSocket=new ServerSocket(4005);
Socket clientSocket=serverSocket.accept();
InputStream is=clientSocket.getInputStream();
OutputStream os=clienSocket.getOutputStream();
BufferedReader in=new BufferedReader(new InputStreamReader(is));
PrintWriter out=new PrintWriter(os);
String temp="";
String str="";System.out.println("1");
// Otvoreni su streamovi, klijent je nakacen. Sa pocetka price, klijent je
taj koji prvo posalje poruku serveru.
// server ovde cita poruku liniju po liniju.
// Cak i ako je XML dobro formatiran i ima n i na kraju poslednje linije
server u ovoj petlji uvek radi sledece:
// 1. Procita liniju ako je dostupna ako ne ceka dok linija ne postane
dostupna
// 2. napise po konzoli da cita
// 3. doda procitanu liniju na str
// 4. vrati se na korak 1
while((temp=in.readLine())!=null){
System.out.println("Cita iz fajla!n ");
str+=temp;
}
// Ovde server nikad nece da dodje posto nikad nece da izadje iz gornje
petlje
// a nece da izadje zato sto in.reradLine() ima da vrati null SAMO KAD DODJE
DO EOS-a
// tj kad se stream zatvori. U tvom slucaju to se nikad ne desava posto
klijent u tom trenutku
// ceka na server da mu posalje poruku, a server u isto vreme ceka na
klijenta da mu posalje poruku.
System.out.println(str);
out.write("Poruka primljena,ali je malo nejasna!!!");
out.flush();
*
E sad ako vec zelis da sve ovo radi tako (da klijent posalje fajl, zatim
saceka odgovor sa servera) moraces da dodas neki marker.
Npr, da posle pisanja fajla u stream upises jednu liniju kao npr
out.writeln("<<sending done>>");
A zatim da dodas liniju u while petlju na serveru koja prekida petlju
ukoliko se procitana linija zavrsava sa "<<sending done>>" npr
while((temp=in.readLine())!=null){
if (temp.endsWith("<<sending done">>")) break;
System.out.println("Cita iz fajla!n ");
str+=temp;
}
Probaj... pa javi ako je pomoglo.
--001485f63160b6bb0a046ad11893
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div><div class="gmail_quote">2009/5/26 Kursulla <span dir="ltr"><<a href="mailto:
[email protected]">
[email protected]</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Ipak nije problem u tome.<br>
<br>
Kako se meni si problem je sledeci:<br>
<br>
Server ne stigne da izvuce sve podatke iz streama kada se klijent zakuca na readLine() i kako se client zakucao, readLine na serverskoj strani ostane zakucan i da se nosi sve u ........<br>
<br>
Ali sto je cudno, i kada taj readLine (na klijentskoj strani) radim u nezavisnoj niti problem i dalje postoji!?<br><font color="#888888">
<br>
--<br>
<a href="
http://www.elitesecurity.org/p2289756" target="_blank">
http://www.elitesecurity.org/p...<div></div><div class="h5"><br>
<br>
Prijave/odjave: <a href="
http://www.elitesecurity.org/liste" target="_blank">
http://www.elitesecurity.org/liste</a><br>
<br>
Ne menjajte sledece dve linije ukoliko odgovarate putem emaila!<br>
esauth:365073:afff8e86a799097b80621baa3a16c295<br>