Avatar billede bolmer Nybegynder
18. september 2006 - 04:09 Der er 7 kommentarer og
1 løsning

Klient blokere!

Jeg har lavet dette meget simple klient server program. Jeg starter med at starte serveren hvor efter jeg starter en klient. Forbindelse bliver fint oprettet, men efter jeg skriver noget med klienten første gang så blokere den bare. Håber nogen kan hjælpe.

import java.io.*;
import java.net.*;


public class Server {

    public static void main(String[] args) {

        ServerSocket serverSocket = null;
        Socket ss = null;
        BufferedReader in = null;
        PrintWriter out = null;
       

        try {
            serverSocket = new ServerSocket(4444);
           
            System.out.println("CRAP1");
            ss = serverSocket.accept();
            System.out.println("CRAP2");
            in = new BufferedReader(new InputStreamReader(ss.getInputStream()));
            out = new PrintWriter(ss.getOutputStream());
           
            String bob = null;
           
            while ((bob = in.readLine()) != null)
            {
                System.out.println("CRAP3");
                out.println(bob + "from server");
                System.out.println(bob);
            }
            serverSocket.close();
            }   
       
        catch (IOException e) {
            e.printStackTrace();
        }
    }

}


import java.io.*;
import java.net.*;

public class Client {

    public static void main(String[] args) {
        Socket socket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        BufferedReader user = null;
        try
        {
            String fromServer, fromUser;
           
            // Connect to server.
            socket = new Socket("localhost",4444);
           
            // Out channel.
            out = new PrintWriter(socket.getOutputStream());

            // In channel.
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
           
            // Input from user.
            user = new BufferedReader(new InputStreamReader(System.in));

            while ((fromServer = in.readLine()) != null)
            {
                System.out.println(fromServer);
                fromUser = user.readLine();
               
                if (fromUser != null)
                {
                    out.println(fromUser);
                }
            }
           
           
        }catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
    }

}
Avatar billede arne_v Ekspert
18. september 2006 - 04:17 #1
start med at prøv at kalde flush når du skriver til socket
Avatar billede arne_v Ekspert
18. september 2006 - 04:27 #2
Hm.

Starter du ikke med at læse fra socket for både client og server d.v.s. at de venter
på hinanden ?
Avatar billede lborupj Nybegynder
18. september 2006 - 09:54 #3
Der er faktisk forskel på om du  laver
socket.getInputStream eller socket.getOutputStream først.
Jeg kan ikke lige huske hvilken du skal bruge først :-( Desværre
Avatar billede bolmer Nybegynder
18. september 2006 - 11:12 #4
Min client starter med at læse fra System.in

Min Server starter med at læse fra en socket.

Har prøvet at bytte om på getInputStream og getOutputStream men det har ingen indflydelse.

Jeg tror jeg forsøger at køre koden på en anden maskine....der er intet i det ovenstående der ikke burde fungere.
Avatar billede arne_v Ekspert
18. september 2006 - 13:00 #5
så vidt jeg kan se kalder du in.readLine() inden user.readLine() i Client
Avatar billede bolmer Nybegynder
18. september 2006 - 14:04 #6
jeg skulle bare enable autoflush ved at skrive "true" som 2. argument i konstruktøren når man opretter PrintWriter, som vel var det dit første svar :-) Du skal have dine point!
Avatar billede arne_v Ekspert
18. september 2006 - 19:18 #7
jeg taenkte nu paa eksplicit flush, men det giver samme effekt

jeg synes jo at det naesten er pudsigt saa ens mine to foerste kommantarer
og saa dem du fik i dk.edb.programmering.java var

:-)

jeg tror ioevrigt at du kunne have nytte af at laese http://www.eksperten.dk/artikler/515

den drejer sig egentlig om at faa Java og .NET til at snakke over socket, men
Java koden er saamaend ogsaa relevant for Java til Java

og svar
Avatar billede bolmer Nybegynder
18. september 2006 - 19:43 #8
Ja det har givet mig en del hovedepine at glemme at flushe...tror aldrig jeg glemmer det igen :-)
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