Avatar billede backupmand Nybegynder
06. januar 2005 - 13:34 Der er 9 kommentarer

Connection reset af server

Hejsa, jeg er en klient der opnår forbindelse til en server på en bestemt port. Forbindelsen er ok, men resettes kort tid derefter.

Det jeg forsøger er, at starte en tråd, der lytter på inputstrømmen hele tiden. Det er her forbindelsen bliver resettet.

Er der nogle der har en ide til hvad det kan være?

Også selvom jeg sender et par kommandoer til serveren først, bliver min connection resettet. Connectionen bliver dog først resettet efter jeg har sendt kommandoer. Som om der er en meget kort timeout tid.

Tak
Avatar billede snoop_one Nybegynder
06. januar 2005 - 15:13 #1
Hvordan er din server og klient sat op? Køre du gennem RMI? har du en simple RMI server application eller køre du med EJB?
Avatar billede backupmand Nybegynder
06. januar 2005 - 15:47 #2
Jeg ved der er en server et sted og den har en bestemt port. Det er ikke mig der har denne server, jeg skal blot connecte til denne server og hente nogle svar derfra, efter jeg har sendt et par requests derop. Svarene kommer asynkront og derfor har jeg behov for at lytte på strømmen og undersøge de svar, jeg får.

Jeg bruger en Socket i java til dette.

Jeg har ikke forsøgt at bruge RMI eller EJB i dette tilfælde, men måske skulle jeg kigge ind i det?
Avatar billede snoop_one Nybegynder
06. januar 2005 - 16:34 #3
EJB er på server siden (EJB bruger også RMI). Så det kan du ikke bruge...
Avatar billede snoop_one Nybegynder
06. januar 2005 - 16:45 #4
Har du et lille kode eksempel?
Avatar billede backupmand Nybegynder
06. januar 2005 - 17:14 #5
public void socketConnector(String serverURL, int serverPort)
    {
        try {
            socket=new Socket(serverURL,serverPort);       
            connected=socket.isConnected();           
            System.out.println("socket connected "+connected);
           
            out=new java.io.PrintStream(socket.getOutputStream());           
            readLoop();

etc ...

og readLoop() :

private void readLoop() {
           
        Thread readThread = new Thread() {
                     
          public void run() {
            System.out.println("read loop starting "); 
            BufferedReader br;

            try {
              br = new BufferedReader( new InputStreamReader( socket.getInputStream(), "UTF-8" ) );
            } catch( IOException e ) {
             
          return;
            }

            String inputLine;

            while( connected ) {
              try {

                /* Read in the command */
                inputLine = br.readLine();
                System.out.println( "<<< " + inputLine );
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }                         
               
              }  catch( IOException e ) {

                System.out.println("IOException ="+e);
                continue;
              }   
            }       
          }
        };       
        readThread.start();
        System.out.println("readThread started");       
      }
Avatar billede snoop_one Nybegynder
06. januar 2005 - 23:52 #6
Bliver denne linie skrevet ud
System.out.println( "<<< " + inputLine );

I din første try catch i readLoop() skulle du måske indsætte e.printstaktrace istedet for return?
Avatar billede backupmand Nybegynder
07. januar 2005 - 00:18 #7
Linjen bliver IKKE skrevet ud. Jeg har gjort som du sagde nu. Jeg har også puttet en e.getMessage(); ind, som jeg skriver ud. Følgende er output:
socket connected true
readThread started
read loop starting
IOException =java.net.SocketTimeoutException: Read timed out

Dernæst skriver den en masse af flg sætninger ud

IOException =java.net.SocketException: Connection reset
IOException =java.net.SocketException: Connection reset
IOException =java.net.SocketException: Connection reset
IOException =java.net.SocketException: Connection reset
etc etc ...

Det er fordi den kommer ind i while løkken, fordi connected = true.
Så det er inde i while loop'ens
inputLine = br.readLine(); at det går galt, går jeg ud fra.

Er der virkelig et så hurtigt timeout på dette?
Det virker underligt, at jeg ikke kan fastholde min connection i denne tråd.
Det var det, jeg gerne ville. Jeg ville så - i en anden tråd .. sende beskeder
til serveren ... alt imens der blev lyttet til indkommende beskeder. Det ser ud som
om det ikke er muligt - eller er det mig der har misset noget her?
Avatar billede snoop_one Nybegynder
07. januar 2005 - 15:49 #8
Det du prøver på er muligt....
Men at checke din br instance ved f.eks.

if(br == null){
System.out.println("S... not again......");
} else{
inputLine = br.readLine();
}

Det kunne også godt være at din firewall ikke tillader indkommende forbindelser - kunne det tænkes?
Avatar billede backupmand Nybegynder
08. januar 2005 - 21:22 #9
Der er ikke noget med firewall. Jeg har fundet ud af, at serveren simpelthen disconnecter dig, hvis du ikke sender noget til den og der kan ikke oprettes en løbende forbindelse til den. Det er muligt, at sende commands til den og få de svar der skal til. Så længe jeg får det jeg skal bruge fra den er det ok, så gør det ikke noget jeg bliver disconnectet. Jeg lukker spørgsmålet.
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