Problem z aplikacją klient-server

0

Witam
Od kilku dni uczę się obsługi Socketów. Jako pierwszy program postanowiłem stworzyc namiastkę komunikatora. Do tej pory mój program składa sie z serwera i klienta. Po połączeniu serwer wysyła wiadomość powitalna , którą odbiera klient, dalej klient wysyła wczytany z klawiatury text, a w odpowiedzi dostaje echo tej wiadomości z serwera.
Problem w tym że chciałbym, żeby z serwera była możliwość wczytania z klawiatury wiadomości i odesłania jej do klienta. Od paru dni z tym walczę i nie bardzo mi to wychodzi. Jeśli mogę prosić o jaką kolwiek pomoc lub podpowiedz to z góry dziękuje.

Poniżej zamieszczam kod serwera i klienta:

package server;
import java.util.*;
import java.io.*;
import java.net.*;
/**
 *
 * @author piotrek
 */
public class Server {

    public static void main(String[] args) {
        // TODO code application logic here
        try
        {
            ServerSocket s=new ServerSocket(8190);
            Socket socket=s.accept();
            BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

            PrintWriter out=new PrintWriter(socket.getOutputStream(),true);

            out.println("Hello! Enter BYE to exit.");
            boolean done=false;
            while(!done)
            {
                String line=in.readLine();

                //String msg=wej.nextLine();

                if(line==null)
                {

                    done=true;

                }
                else
                {

                       System.out.println("Ktos powiedział:"+line);
                       out.println("Echo-zwrot z serwera:"+line);
                       out.flush(); 

                    if(line.trim().equals("BYE"))
                    {
                       done=true;
                    }
                }

            }
             socket.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

}

Klient:

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

/**
 *
 * @author piotrek
 */
public class Klient {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
       try
       {

        byte[] ip={(byte)195, (byte)242,(byte)91,(byte)105};
        String nazwa=InetAddress.getByAddress(ip).getHostName();
        Socket sock=new Socket(nazwa,8190);
         BufferedReader in=new BufferedReader(new InputStreamReader(sock.getInputStream()));
         Scanner wej=new Scanner(System.in);
         PrintWriter out=new PrintWriter(sock.getOutputStream(),true);

         boolean done=false;

         System.out.println("Nawiązano połączenie:\n");
         while(!done)
         {
             String text=in.readLine();
             System.out.println(text); 
             System.out.println("Napisz coś:");
             String msg=wej.nextLine();
             if(msg==null)
             {
                 done=true;
             }
             else
             {

                   out.println(msg);
                   out.flush();
                   if(msg.trim().equals("BYE"))
                   {
                       done=true;
                   }
             }

         }

        sock.close();

       }
       catch(Exception e)
       {
           e.printStackTrace();
       }
       /*catch(ConnectException ex)
       {
           System.err.println("Nie nawiązano połaczenia");
       }*/
     }

}
0

Wydaje mi się że w serwerze nie potrzebnie używasz tej liniji:

   out.println("Echo-zwrot z serwera:"+line);

wysyłasz do clienta text który odniego dostałeś, poco??? lepszym rozwiązaniem jest wysłać coś co
sam np. wpisałeś, client wygląda w porządku.

Chociaż taka uwaga to z programowaniem aplikacji clinet-serwer bardzo mocną jest powiązane pojęcie
programowania współbieżnego, wiec radze nauczyć i wykorzystywać w tego typu programach wątki:D

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