Avatar billede deepcore Nybegynder
05. oktober 2004 - 14:10 Der er 9 kommentarer og
1 løsning

socket problem med c# klient. hvordan checkes på stream end?

Vi har lavet en Java server der modtager en xml fil. denne xml
fil har en http header hvorfor vi ikke kan bruge bufferedreader's
readline funktion (da http foreskriver 2*carrier return ved enden
af headeren)

problemet ligger i at vi ikke kan checke på hvornår c# klienten er færdig med at sende, og javaserveren derfor hænger... nogen ideer????

java serveren bliver består af flg: (inputstream er iøvrigt en BufferedReader)

public String reciveData() throws Exception
  {
streng til saveData()**/
    System.out.println();
    String check;
    String line="";
    String line1;
    while((check=inputStream.readLine())!=null)
    {
      line+=check;
      System.out.println(line);
    }
    line1 = "read: " +line;
    System.out.println(line1);
    return (line);
  }

C# klienten består af flg:
public string SendData(string xml)
        {       
            string message =null;
            //Sender data
            try
            {           
                sw=new StreamWriter(ns);
                sw.WriteLine(xml);
                sw.Flush();
                         
                sr=new StreamReader(ns);
                message = sr.ReadLine();
                          MessageBox.Show(message);
               
            }
            catch(Exception e){MessageBox.Show(""+e);}
            return message;

        }//SendData end
Avatar billede arne_v Ekspert
05. oktober 2004 - 14:14 #1
Prøv og lad C# clienten kalde sw.Close() når den er færdig.
Avatar billede arne_v Ekspert
05. oktober 2004 - 14:15 #2
Og jeg forstår ikke den med BufferedReader readLine og to gane linie skift
HTTP header.

Der vil da bare komme en readLine med "" (som ikke er null).
Avatar billede deepcore Nybegynder
05. oktober 2004 - 17:58 #3
vi ønsker ikke at afbryde forbindelsen da vi efter at have sendt en xml med http header den ene vej ønsker at sende et svar den anden - uden at skulle etablerer forbindelse igen.
Avatar billede arne_v Ekspert
05. oktober 2004 - 18:03 #4
Hvis du ikke vil lukke, så er du nødt til enten at sende en længde (med readLine
antal linier) eller sende en terminator (med readLine f.eks. en linie med
">>>> FIN <<<<".
Avatar billede deepcore Nybegynder
05. oktober 2004 - 18:04 #5
Indrømmet der godt kan bruges readline - men det bringer mig stadig ikke nærmere ved løsningen, nemlig hvordan man sikrer sig at man har modtaget alt der er sendt fra den anden side. ... er der en eller anden end-of-file caracter man kan checke på?
Avatar billede deepcore Nybegynder
05. oktober 2004 - 18:09 #6
problemet er at hvis jeg sender en længde eller terminator med ryger ideen med at bruge http standarten
Avatar billede arne_v Ekspert
05. oktober 2004 - 19:08 #7
Hvis du vil følge HTTP standarden, så må du jo følge den.

Så læser du content-length HTTP headeren, læser det antal data
bytes (efter den tomme linie) som byte array, læser dine linier
fra det byte array (wrap byte arrayet i en ByteArrayInputStream).
Avatar billede deepcore Nybegynder
06. oktober 2004 - 09:08 #8
jammen... det er jeg godt klart over, men det må da være muligt at checke på hvornår der ikke er mere i den stream jeg læser på, eller hva?
Avatar billede arne_v Ekspert
06. oktober 2004 - 09:27 #9
Nej.

En stream er en stream.

Server kan ikke per magi se hvornår client synes message logisk slutter.

EOF eller længde eller marker.
Avatar billede arne_v Ekspert
17. oktober 2004 - 17:45 #10
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester