Avatar billede preben.m Nybegynder
20. juli 2006 - 20:42 Der er 11 kommentarer og
1 løsning

Socket(Buffered) reader med Delimiter

Hej jeg har en server der skal modtage anmodninger fra en klient, klienten kontakter serverSocket på port 9600.

Programmet skal så vente på en hel streng, enden er definieret med char seq. ASCII carriage return character(DEC13), line feed (DEC10). når denne streng er fundet skal der kaldes en metode med resultatet som en String eller et Array.

Jeg har prøvet at finde de rette klasser til dette, alternativt skal jeg selv kode det. Jeg giver points for en løsning der bruger mest af de indbygget java funktioner.

Jeg uddyber gerne ved evt. spørgsmål
Avatar billede arne_v Ekspert
20. juli 2006 - 20:55 #1
du hiver en InputStream ud af din Socket og wrapper din i en BufferedReader
(skal lige over en InputStreamReader) og s[ bruger du readLine
Avatar billede arne_v Ekspert
20. juli 2006 - 20:58 #2
private Socket s;
    private BufferedReader br;

            br = new BufferedReader(new InputStreamReader(s.getInputStream()));

            String line;
            while((line = br.readLine()) != null) {


            }

er helt standard
Avatar billede preben.m Nybegynder
20. juli 2006 - 21:06 #3
Tager dette højde for delimiter RET,LF ???

Eksempel :
[49][55][58][53][56][32][50][48][47][48][55][13][10]
[ 1][ 7][ :][ 5][ 8][SP][ 2][ 0][ /][ 0][ 7][CR][LF]
Avatar billede preben.m Nybegynder
20. juli 2006 - 21:16 #4
Det var sørens er det så simpelt det ser ud til at virke, hvis jeg nu skal placere et timeout håndtering (ved tabt forbindelse). Har du mere af den smarte kode ;-)
Jeg kan ikke forstå hvorfor jeg ikke kom på den kode du har brugt, jeg har søgt på nettet og alt muligt.

min kode :
    public Player()
    {
       
        try
        {
            ServerSocket s = new java.net.ServerSocket(9600);
            Socket con = s.accept(); 
         
            BufferedReader reader =
            new BufferedReader(new InputStreamReader(con.getInputStream()));

              reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
 
              String line;
              while((line = reader.readLine()) != null)
              {
                // Kald til parser skal på her
                  System.out.println("line ="+line);
              }
 
             
              // clientsocket connection ended
              // implement timeouts
        }
        catch (IOException ex)
        {
            System.out.println(ex);
        }
 
    }
Avatar billede preben.m Nybegynder
20. juli 2006 - 21:17 #5
PS. du må gerne komme med et svar så er der point på vej til dig.
Avatar billede arne_v Ekspert
20. juli 2006 - 21:21 #6
readLine haandterer linieskift

CR LF er standard linieskift paa socket connections uanset platform

saa det boer vaere helt OK
Avatar billede arne_v Ekspert
20. juli 2006 - 21:26 #7
koden boer varee mange steder

naermeste er nok http://www.eksperten.dk/artikler/515

og et svar
Avatar billede preben.m Nybegynder
20. juli 2006 - 21:26 #8
Jeg er nok kommet til at komplicere det helt uden grund, tanken om standard linie skift strejfet mig slet ikke???? desuden forkommer CR slet ikke i strengen i øvrit så at kigge efter en seq. (selv om den kun er på to tegn) er helt unødvendig.

P.S. husk at sende dit svar, det har været en stor hjælp
Avatar billede preben.m Nybegynder
20. juli 2006 - 21:29 #9
Ja det er den sikkert, men jeg har søgt på ord som : Java Delimiter Bufferedreader Socket SequenceInputStream. Helt ude i skoven ;-)

Kan du komme med en god måde at håndtere timeouts på forbindelsen ??
Avatar billede arne_v Ekspert
20. juli 2006 - 21:31 #10
du faar en exception with timeout - MEN det kan tage lang tid inden du faar timeout, saa
hvis du vil lukke hurtigt skal du have en i-am-alive message og afslutte naar
den ikke er dukket op indenfor X sekunder
Avatar billede preben.m Nybegynder
20. juli 2006 - 21:32 #11
OK, det må jeg se på
Avatar billede arne_v Ekspert
20. juli 2006 - 21:51 #12
det kan godt vaere svaert at ramme de rigtieg soegeord

java socket bufferedreader

ville nok have givet dig det rigtige

bl.a. http://java.sun.com/docs/books/tutorial/networking/sockets/readingWriting.html
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