Aplikacja klient/server przy użyciu wątków


(Jedras121) #1

Witam.

Piszę obecnie prosty komunikator klient/server. Napisałem już aplikację w konsoli, która działa poprawnie jednak chciałem to napisać również okienkowo.

I pojawia się problem ponieważ podczas tworzenia połączenia program się zawiesza i udało mi się tylko ustalić, która część kodu to powoduje.

Zaznaczam, że ten sam kod w konsoli działa poprawnie.

EDIT: Udało mi się stworzyć naprawić błąd i aplikacja się obecnie nie zamraża, ale pomimo, że klient się połączył do serwera nie otrzymuje komunikatu potwierdzenia (wyświetlany w jTextArea1). Jak to można naprawić.

I drugie pytanie: jak można spoza wątku sprawdzić, czy jest obecnie podłączony klient do serwera.

Wywołanie inicjalizacji:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


        String sPort=jComboBox1.getSelectedItem().toString();

        int port = Integer.parseInt(sPort);

        try{

        ServerSocket serverSocket = new ServerSocket(port);

        jTextArea1.append("Server waiting for client on port " + serverSocket.getLocalPort()+"\n");

        }

        catch (Exception e){}

        jTextArea1.append("Server waiting for connection \n");


        new Thread (new newSocket(serverSocket,jTextArea1)).start();

        if(klient nawiązał połączenie) ... //JAK TO SPRAWDZIĆ     

        jButton1.setEnabled(false);

    }

Wątek:

class newSocket implements Runnable

{

    public newSocket(ServerSocket s,JTextArea _area)

    {

        serverSocket=s;

        jTextArea1=_area;

    }


    public void run()

    {

        try

        {       

            Socket socket = serverSocket.accept(); // accept connection

            jTextArea1.append("New client asked for a connection"); //to nie działa

        } catch(IOException e){e.printStackTrace(); }

    }


    private JTextArea jTextArea1;

    private ServerSocket serverSocket;

}

Proszę o pomoc.