Witam,
mam pytanie odnośnie serwera TCP. Mianowicie analizując przykład z książki "Java - Techniki zaawansowane" Natrafiłem na przykład serwera TCP do którego może się podłączyć więcej niż jeden klient naraz. Moje pytanie brzmi: Dlaczego jeśli otworzę dwa okna Telnetu i na obu połączę się z tym serwerem to wynik jest zwracany tylko w oknie w którym podałem tekst?
Ponadto chciałbym się zapytać czy możnaby poprawić ten kod w ten sposób aby tekst podany przez jednego klienta, był widoczny dla wszystkich (bez konieczności rozróżniania przez kogo został on napisany).
Poniżej zamieszczam kod:
Klasa TCPHandler:
< code = java >
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class TCPHandler implements Runnable{
private Socket incoming;
public TCPHandler(Socket i)
{
this.incoming = i;
}
public void run()
{
try
{
try
{
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true);
out.println("Hello! --- BYE to exit");
boolean done = false;
while(!done && in.hasNextLine())
{
String line = in.nextLine();
out.println("Echo: "+line);
if(line.trim().equals("bye".toUpperCase())){
done = true;
}
}
}
finally{
incoming.close();
}
}
catch(IOException e){}
}
}
< / code >
Oraz klasa TCPTalkTest:
< code = java >
import java.net.ServerSocket;
import java.net.Socket;
public class TCPTalkTest {
public static void main(String []args)
{
try
{
ServerSocket s = new ServerSocket(8189);
while(true)
{
Socket incoming = s.accept();
Runnable r = new TCPHandler(incoming);
Thread t = new Thread(r);
t.start();
}
}
catch(Exception e){}
}
}
< / code >
Z góry dzięki za każdą pomoc wskazówkę :)
Pozdrawiam,