Klient/serwer w jednym programie.

0

Witam. Próbuje zrobić program, który działa jednoczenie jako klient i jako serwer. Doszedłem do punktu w którym klient odbiera dane od serwera, ale w drugą stronę już tak się nie dzieje choć buffer odpowiedzialny za wysłanie- nie zwraca żadnych błędów.
Kod wygląda tak:

,
class ConnectionHandler implements Runnable {                                    //wątek tworzony, dla dla serwera dla obsługiwania połaczen
    public static Socket socket; 
  
    public ConnectionHandler(Socket socket) { 
        this.socket = socket; 
  
        Thread t = new Thread(this); 
        t.start(); 
    } 
    public void run() { 
        try 
        {     

        PrintWriter out= new PrintWriter(socket.getOutputStream(), true); 
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
                 
        while (true)                        //nie wiem czy to jest dobry pomysł dawac tu tą pętle? 
        {        
        if(in.ready()) System.out.println("bufor jest ready");       // GŁÓWNY PROBLEM - buffrer jest zawsze pusty  i niegotowy,pomimo, że klient wysyła dane 
         out.println("Siemano!!");                                                                                 
        
        }       
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
} 



class serverStart implements Runnable{ 
    
public static ServerSocketChannel ssChannel; 
private Socket socket = null;  
PrintWriter  wyjscie; 
BufferedReader wejscie; 
boolean chuj = true; 
public SocketChannel ServerConnection; 
ConnectionHandler connection; 

   public serverStart()  
    { 
   try{ 
   // Create a non-blocking server socket channel on port 80                      //Utworzenie socketa servera 
     ssChannel = ServerSocketChannel.open();                                                //nieblokujacego 
     ssChannel.configureBlocking(false); 
     int port = 4444; 
     ssChannel.socket().bind(new InetSocketAddress(port)); 
 System.out.println("Stworzylem serwer na porcie " + Integer.toString(port)); 
    } 
   catch(IOException e) { 
    System.out.println("Port jest zajety albo niedostepny"); 
    } 

    } 
  public void run() 
   { 


while(true) 
   try { 
   SocketChannel Listenserver = ssChannel.accept();                    //Nasłuchiwanie połaczeń 
   
       if (Listenserver == null) 
       { 
       } 
       else 
       {     
       System.out.println("ktosie podlaczyl"); 
       ServerConnection = Listenserver;   //Jezeli ktos sie połaczył tworzę 
     new Thread(new ConnectionHandler(ServerConnection.socket()));               //obiekt odpowiedzialny za to połaczenie 
       } 
   } catch (IOException e) { 
   } 
} 
} 

public class Net{                                                                                       //glowna klasa... 

 serverStart watek = new serverStart(); 
 public static Socket socket; 
 private int row,col; 


public Net() 
{ 

    new Thread(watek).start(); 

} 

public void sendMove(int r,int c)                                          //ta metoda wykonuje sie gdy dziala juz watek 
{                                                                          //servera, uruchamia sie zakazdym razem jak klikam na obiek w innej 
 try                                                                       //klasie. za kazdym razem wysyla dane do serwera ktore tam nie trafiaja
         { 
 PrintWriter BuforWyjsciowy = new PrintWriter(socket.getOutputStream(),true);  //auto-flush wlaczony...
   BufferedReader BuforWejsciowy = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
             
             BuforWyjsciowy.println("Serwer powinie odebrac ta wiadomiosc");     // GŁÓWNY PROBLEM -wysyłam wiadomosc serwerowi 
      if(BuforWyjsciowy.checkError()) System.out.println("error");                    //który działa  na nieskonczonej petli 
      else System.out.println("brak bledu podczas wysyłania");                          // w osobnym watku, jednak nigdy ona do niego nie dociera 
      
         if(BuforWejsciowy.ready()) 
         {           
         System.out.println("Wiadomosc od serwera: " + BuforWejsciowy.readLine());       
         } 
         else 
         { 
         System.out.println("buffor oczywiscie nie gotowy"); 
         }                                       
         } 
         catch (IOException e) 
         {  
         } 
 } 

public boolean connect(String adress){  //Tworzenie polaczen klienta 

        try 
        { 
            socket = new Socket(adress, 4444);                                                           //utworzenie socketa klienta 
            System.out.println("Polaczylem sie z " + adress);                    
       }   
        catch (UnknownHostException e) 
        { 
            System.err.println("Nie znalezionmo komputera: localhost."); 
           return false; 
  
        } 
        catch (IOException e) 
        { 
            System.err.println("Nie mo¿na nawi¹zaæ kmunikacji z komputerem: localhost."); 
            return false; 
        } 
 return true; 
 } 

 }

0

temat zaktualizowany o nowa tresc i problem

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.