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");
}*/
}
}