Słownik-brak tłumaczenia

0

Witam
Mam problem z programem, który nie działa do końca poprawnie. Składa się on z programu serwera wysyłającego informację do klienta oraz programu klienta odbierającego od niego informację przesłaną przez sieć. Problem polega na tym, że po kliknięciu przetłumacz słowo nie jest tłumaczone. Oto klasy tego programu.

.


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

public class Serwer  {
public static void main(String args[]) {
    
        ServerSocket polaczenie = null;
        Socket gniazdo = null;
        InputStream we = null;
        OutputStream wy = null;
        BufferedReader odczyt = null;
        BufferedReader odczytWe = null;
        DataOutputStream zapis = null;
                String slowoPL="",slowoEN="";

try {
    polaczenie=new ServerSocket(8866);
    }
    catch(IOException e)
    { System.out.println("Nie można utworzyć gniazda serwera.");   }

try {
    gniazdo=polaczenie.accept();
    }
    catch(IOException e)
    {   System.out.println("Nie można nawiązać połączenia z klientem.");   }
                          
try {
    we=gniazdo.getInputStream();
    }
    catch(IOException e)
    {   System.out.println("Nie można pobrać strumienia wejściowego.");   }

try {
    wy=gniazdo.getOutputStream();
    }
    catch(IOException e)
    {   System.out.println("Nie można pobrać strumienia wyjściowego.");   }

while(true){
try{
    odczyt = new BufferedReader(new InputStreamReader(we));
    slowoPL = odczyt.readLine();
                    
     if((slowoPL == null) || slowoPL.equals("koniec"))
     {
     gniazdo.close();
     System.exit(0);
     }
                    
     else if( slowoPL!=null )
          {
          System.out.println("Odczytano slowo : " + slowoPL);
          if(slowoPL.equals("okno")){ slowoEN="window"; }
          else if(slowoPL.equals("ekran")){ slowoEN="screen"; }
          else if(slowoPL.equals("oko")){ slowoEN="eye"; }
          else if(slowoPL.equals("ucho")){ slowoEN="ear"; }
          else if(slowoPL.equals("dom")){ slowoEN="house"; }
          else if(slowoPL.equals("noga")){ slowoEN="leg"; }
          else if(slowoPL.equals("cukier")){ slowoEN="sugar"; }
          else { slowoEN="";
          }
                                    
zapis = new DataOutputStream(wy);
zapis.writeBytes(slowoEN+ "\n");
zapis.flush();
System.out.println("Wyslano slowo : " + slowoEN);
                                 
          }
                                
   } catch(IOException e){  System.out.println("Problem wejścia - wyjścia.");   }
/* koniec pętli while: */
        }
}
}






import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Klient {

public static void main(String[] args) {
OknoKlient okno = new OknoKlient();
okno.setSize(300,200);
okno.setTitle("Okno klienta.");
okno.setVisible(true);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

class OknoKlient extends JFrame implements ActionListener{
JTextField pole1=null, pole2=null;
Socket polaczenie = null;
InputStream we=null;
OutputStream wy=null;
Watek1 w1=null;
Watek2 w2=null;

public OknoKlient() {
setLayout(new FlowLayout());
JLabel lab1=new JLabel("Wpisz polskie słowo do przetłumaczenia:");
add(lab1);
pole1 =new JTextField(20);
add(pole1);

JButton przycisk1=new JButton("wyczyść");
przycisk1.addActionListener(this);
add(przycisk1);

JButton przycisk2=new JButton("przetłumacz");
przycisk2.addActionListener(this);
add(przycisk2);

JButton przycisk3=new JButton("koniec");
przycisk3.addActionListener(this);
add(przycisk3);

JLabel lab2=new JLabel("Słowo w języku angielskim:");
add(lab2);
pole2 =new JTextField(20);
add(pole2);

try{
    polaczenie= new Socket("localhost", 8866);
    } catch(Exception e){  }
/* koniec konstruktora: */
}

public void actionPerformed(ActionEvent ev) {

if(ev.getActionCommand()=="wyczyść") {
      pole1.setText("");
      pole2.setText("");
    }

if(ev.getActionCommand()=="przetłumacz") {
      w2=new Watek2(polaczenie,wy);
      w2.start();
    }
if(ev.getActionCommand()=="koniec") {
      w1=new Watek1(polaczenie,wy);
      w1.start();
    }
}

class Watek1 extends Thread {
Socket polaczenie;
OutputStream wy;
DataOutputStream zapis = null;
InputStream we;
BufferedReader odczyt = null;

public Watek1(Socket polaczenie,OutputStream wy)
    {
     this.polaczenie=polaczenie;
    this.wy=wy;
    }

public void run() {
            try{
                wy=polaczenie.getOutputStream();
                zapis = new DataOutputStream(wy);
                zapis.writeBytes("koniec");
                                        polaczenie.close();
                                        System.exit(0);
                                      }  catch(Exception e){ }


/* koniec metody run():   */
}

/* koniec klasy wew: */
}

class Watek2 extends Thread {
Socket polaczenie;
OutputStream wy;
DataOutputStream zapis = null;
InputStream we;
BufferedReader odczyt = null;

public Watek2(Socket polaczenie,OutputStream wy)
    {
       this.polaczenie=polaczenie;
       this.wy=wy;
    }

public void run() {
            try{
                            wy=polaczenie.getOutputStream();
                            String slowoPL=pole1.getText();

                if( slowoPL!=null && !(slowoPL.equals("")) ) {
                zapis = new DataOutputStream(wy);
                zapis.writeBytes(slowoPL + "\n");
                
                we=polaczenie.getInputStream();
                odczyt= new BufferedReader (new InputStreamReader(we));
                String slowoEN=odczyt.readLine();

                            if (slowoEN!=null && !(slowoEN.equals("")) )  {
                            pole2.setText(slowoEN);
                                               }
                            else if (slowoEN==null && !(slowoEN.equals("")) )  {
                            pole2.setText("");
                                               }
                                                 }

             }  catch(Exception e){ }

/* koniec metody run():   */
}
/* koniec klasy wew: */
}
/* koniec klasy Oknopolaczenie: */
}
0
  1. Umieszczaj kod w znacznikach <code class="java"> </code>.
  2. Dopóki program nie działa, obsługa błędów musi być inna, minimum, to
System.out.println(e);
  1. Skompilowałem i działa. Jesteś pewien, że uruchomiłeś serwer?
0

Program nie wyrzuca błedu, ale nie tłumaczy. Wpisałeś słowo polskie i przetłumaczyło Ci na angielskie? Bo u mnie nie chce tłumaczyć.

0

U mnie tłumaczy. Skąd wiesz, że nie ma błędu, skoro masz "pustą" obsługę błędów?

catch(Exception e){}
0

Dopiero zaczynam przygodę z Javą i nie wiem za bardzo o chodzi. Mógłbyś wrzucić Twój działający kod? Mógłbym sobie wtedy porównać oba programy, bo sam to nie wiem czy do tego dojdę.

0

Zmiany, które wprowadziłem, to inna obsługa błędów. Dzięki niej mam pewność, że u mnie błędów nie ma.
W kodzie serwera jedna zmiana:

   } catch(IOException e){  System.out.println("Problem wejścia - wyjścia.");
   System.out.println(e);}
//zamiast
   } catch(IOException e){  System.out.println("Problem wejścia - wyjścia.");}

W kodzie klienta trzy identyczne zmiany:

   }  catch(Exception e){ 
      System.out.println(e);}
//zamiast
   } catch(Exception e){}
0

Bez jaj

Koleś albo po prostu jesteś studentem i zerżnąłeś ten program od kolegi i o czymś zapomniałeś, albo sobie jaja robisz.
Skoro napisałeś taki program to dlaczego nie sprawdzasz sobie jakie wyjątki Ci rzuca. Nie umiesz napisać choćby system.out w bloku catch, jak Ci się nie chce to złap sobie główny wyjątek Exception i walnij e.printStackTrace()

0

Tragedia. Nie dość ze kod ściągnięty to jeszcze jak ktoś pisze program client-server nie wiedząc o istnieniu mapy?

          if(slowoPL.equals("okno")){ slowoEN="window"; }
          else if(slowoPL.equals("ekran")){ slowoEN="screen"; }
          else if(slowoPL.equals("oko")){ slowoEN="eye"; }
          else if(slowoPL.equals("ucho")){ slowoEN="ear"; }
          else if(slowoPL.equals("dom")){ slowoEN="house"; }
          else if(slowoPL.equals("noga")){ slowoEN="leg"; }
          else if(slowoPL.equals("cukier")){ slowoEN="sugar"; }
          else { slowoEN="";

a jak słów będzie milion? o_O Ile czasu zajmie przetłumaczenie ostatniego słowa?

0

Poprawiłem obsługę błędów tak jak sugerował bogdans, ale coś mi dalej nie działa. Jest tak samo jak było. Wpisuje polskie słowo, ale go nie tłumaczy. Wkleje kod, żeby nie było wątpliwości, że jest już poprawny.

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Klient {

public static void main(String[] args) {
OknoKlient okno = new OknoKlient();
okno.setSize(300,200);
okno.setTitle("Okno klienta.");
okno.setVisible(true);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

class OknoKlient extends JFrame implements ActionListener{
JTextField pole1=null, pole2=null;
Socket polaczenie = null;
InputStream we=null;
OutputStream wy=null;
Watek1 w1=null;
Watek2 w2=null;

public OknoKlient() {
setLayout(new FlowLayout());
JLabel lab1=new JLabel("Wpisz polskie słowo do przetłumaczenia:");
add(lab1);
pole1 =new JTextField(20);
add(pole1);

JButton przycisk1=new JButton("wyczyść");
przycisk1.addActionListener(this);
add(przycisk1);

JButton przycisk2=new JButton("przetłumacz");
przycisk2.addActionListener(this);
add(przycisk2);

JButton przycisk3=new JButton("koniec");
przycisk3.addActionListener(this);
add(przycisk3);

JLabel lab2=new JLabel("Słowo w języku angielskim:");
add(lab2);
pole2 =new JTextField(20);
add(pole2);

try{
    polaczenie= new Socket("localhost", 8866);

}  catch(Exception e){ 
   System.out.println(e);}
/* koniec konstruktora: */
}

public void actionPerformed(ActionEvent ev) {

if(ev.getActionCommand()=="wyczyść") {
      pole1.setText("");
      pole2.setText("");
    }

if(ev.getActionCommand()=="przetłumacz") {
      w2=new Watek2(polaczenie,wy);
      w2.start();
    }
if(ev.getActionCommand()=="koniec") {
      w1=new Watek1(polaczenie,wy);
      w1.start();
    }
}

class Watek1 extends Thread {
Socket polaczenie;
OutputStream wy;
DataOutputStream zapis = null;
InputStream we;
BufferedReader odczyt = null;

public Watek1(Socket polaczenie,OutputStream wy)
    {
     this.polaczenie=polaczenie;
    this.wy=wy;
    }

public void run() {
            try{
                wy=polaczenie.getOutputStream();
                zapis = new DataOutputStream(wy);
                zapis.writeBytes("koniec");
                                        polaczenie.close();
                                        System.exit(0);

            }  catch(Exception e){ 
               System.out.println(e);}


/* koniec metody run():   */
}

/* koniec klasy wew: */
}

class Watek2 extends Thread {
Socket polaczenie;
OutputStream wy;
DataOutputStream zapis = null;
InputStream we;
BufferedReader odczyt = null;

public Watek2(Socket polaczenie,OutputStream wy)
    {
       this.polaczenie=polaczenie;
       this.wy=wy;
    }

public void run() {
            try{
                            wy=polaczenie.getOutputStream();
                            String slowoPL=pole1.getText();

                if( slowoPL!=null && !(slowoPL.equals("")) ) {
                zapis = new DataOutputStream(wy);
                zapis.writeBytes(slowoPL + "\n");
                
                we=polaczenie.getInputStream();
                odczyt= new BufferedReader (new InputStreamReader(we));
                String slowoEN=odczyt.readLine();

                            if (slowoEN!=null && !(slowoEN.equals("")) )  {
                            pole2.setText(slowoEN);
                                               }
                            else if (slowoEN==null && !(slowoEN.equals("")) )  {
                            pole2.setText("");
                                               }
                                                 }


            }  catch(Exception e){ 
               System.out.println(e);}

/* koniec metody run():   */
}
/* koniec klasy wew: */
}
/* koniec klasy Oknopolaczenie: */
}






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

public class Serwer  {
public static void main(String args[]) {
    
        ServerSocket polaczenie = null;
        Socket gniazdo = null;
        InputStream we = null;
        OutputStream wy = null;
        BufferedReader odczyt = null;
        BufferedReader odczytWe = null;
        DataOutputStream zapis = null;
                String slowoPL="",slowoEN="";

try {
    polaczenie=new ServerSocket(8866);
    }
    catch(IOException e)
    { System.out.println("Nie można utworzyć gniazda serwera.");   }

try {
    gniazdo=polaczenie.accept();
    }
    catch(IOException e)
    {   System.out.println("Nie można nawiązać połączenia z klientem.");   }
                          
try {
    we=gniazdo.getInputStream();
    }
    catch(IOException e)
    {   System.out.println("Nie można pobrać strumienia wejściowego.");   }

try {
    wy=gniazdo.getOutputStream();
    }
    catch(IOException e)
    {   System.out.println("Nie można pobrać strumienia wyjściowego.");   }

while(true){
try{
    odczyt = new BufferedReader(new InputStreamReader(we));
    slowoPL = odczyt.readLine();
                    
     if((slowoPL == null) || slowoPL.equals("koniec"))
     {
     gniazdo.close();
     System.exit(0);
     }
                    
     else if( slowoPL!=null )
          {
          System.out.println("Odczytano slowo : " + slowoPL);
          if(slowoPL.equals("okno")){ slowoEN="window"; }
          else if(slowoPL.equals("ekran")){ slowoEN="screen"; }
          else if(slowoPL.equals("oko")){ slowoEN="eye"; }
          else if(slowoPL.equals("ucho")){ slowoEN="ear"; }
          else if(slowoPL.equals("dom")){ slowoEN="house"; }
          else if(slowoPL.equals("noga")){ slowoEN="leg"; }
          else if(slowoPL.equals("cukier")){ slowoEN="sugar"; }
          else { slowoEN="";
          }
                                    
zapis = new DataOutputStream(wy);
zapis.writeBytes(slowoEN+ "\n");
zapis.flush();
System.out.println("Wyslano slowo : " + slowoEN);
                                 
          }
                                
} catch(IOException e){  System.out.println("Problem wejścia - wyjścia.");
System.out.println(e);}
/* koniec pętli while: */
        }
}
}
0

odważę się zadać głupie pytanie: JAKIE słowo wpisujesz? :D

0

Wpisuję, np. słowo: "okno" albo "ekran".

0

Fantastycznie. To uruchom serwer PRZED klientem - i będzie latać. Naprawdę, wszyscy obiecują ;)

Aaaa - firewall Ci programików nie blokuje? ;)

0

A komunikaty na konsoli czytasz?
Żeby nie być uzależnionym od kolejności uruchomienia programów, napisałbym tak:

if(ev.getActionCommand()=="przetłumacz") 
{
      if(polaczenie == null)
      {
        try
        {
            polaczenie = new Socket("localhost", 8866);
        } 
        catch(Exception e)
        {  
            System.out.println(e);
            return;
        }
      }
      w2 = new Watek2(polaczenie,wy);
      w2.start();
}
0

Wyrzuca mi błąd, że: "Nie można utworzyć gniazda serwera" jak uruchamiam serwer.

0

Wyrzuca mi błąd, że: "Nie można utworzyć gniazda serwera" jak uruchamiam serwer.

0

Oooo, czyli firewall chyba jednak Cię blokuje ... albo coś Ci siedzi na porcie 8866 ;) Załatw to sobie jakoś - ubij tego firewalla, wyjątek mu dodaj... ;)

0

Już pierwotna wersja Twojego programu wypisywała ten komunikat. Nie mogłeś go przeczytać i zamieścić na forum?
Coś Ci blokuje port, może firewall jak napisał @Ranides.
Sprawdź czy nasz w pliku java.policy wiersz postaci

permission java.net.SocketPermission "localhost:1024-", "listen,connect";

Pozwala to tworzyć gniazda na wszystkich portach > 1023.

0

Dokładnie to coś takiego mi wyskakuje:

Exception in thread "main" java.lang.NullPointerException
at Serwer.main(Serwer.java:23)
Nie można utworzyć gniazda serwera.

1

Ten błąd jest konsekwencja poprzedniego. Skoro nie powiodło się

polaczenie=new ServerSocket(8866);

to w wierszu 23

gniazdo=polaczenie.accept();

masz NPE.
Widać, że powinieneś poprawić program serwera. Po nieudanym utworzeniu gniazda trzeba program zakończyć.

0
duk napisał(a):

Dokładnie to coś takiego mi wyskakuje:

Exception in thread "main" java.lang.NullPointerException
at Serwer.main(Serwer.java:23)
Nie można utworzyć gniazda serwera.

No dobrze, dobrze. Wiemy. Ale to twój system i twoje zabawki - sam najlepiej chyba wiesz, co Ci na systemie działa i co porty blokuje ;) z kodem programu to już nie ma wiele wspólnego ;)

0

Firewall raczej nie blokuje, bo eclipse i jave odblokowałem.

0

A plik java.policy sprawdzałeś?

0

Tego jeszcze nie zrobiłem. Muszę go znaleźć.

0

Jeśli Windows, to pewnie tu: *c:\Program Files\java\jre7\lib\security* (numer wersji może być inny ;)).

0

Mam taką linijkę:

allows anyone to listen on un-privileged ports permission java.net.SocketPermission "localhost:1024-", "listen";00

Wpisuję też porty niższe niż 1000, ale za każdym razem ten sam błąd.

0

jeśli linia jest, to po prostu zostaw - program akurat używa portu 8866 (jakbyś nie wiedział ;))

skoro uprawnienia masz, "firewalla" odblokowałeś (wypada Ci wierzyć ;)), programów działających na porcie 8866 nie znalazłeś (może nie szukałeś? ;)), no to pozostaje jeszcze możliwość, że w stosie TCP/IP między starymi ramkami robactwo się zagnieździło i porty zjada.

0

A mógłby ktoś sprawdzić czy on w ogóle działa? Bo wcześniej było pisane, że działa i nie wiem czy po prostu tylko u mnie nie działa czy program jest źle napisany.

0
bogdans napisał(a):

Skompilowałem i działa. Jesteś pewien, że uruchomiłeś serwer?

no przecież sprawdził bogdans - bogdansowi nie wierzysz? ;) u mnie też działa, w ciemno bym nie obiecywał:

Ranides napisał(a):

Fantastycznie. To uruchom serwer PRZED klientem - i będzie latać. Naprawdę, wszyscy obiecują ;)

Bez żadnych zmian - pomijając jakość kodu, jest to kod działający ;)

Mówię Ci ja - to te robactwo żrące porty. Żółte paskudztwo, żre wszystko... muchozolem na kartę sieciową, to się naprawi :P

0

@duk, u Ciebie program też działa. Tylko z jakiegoś powodu nie może utworzyć gniazda na porcie 8866. Te powody, to zła konfiguracja Twojego komputera, albo działalność jakichś diabełków.

0

Sprawdziłem na innym kompie i działa.
Wielkie dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1