Dzień dobry!
Mam problem z wątkami w Javie, dokładniej to mam program Client-Server i potrzebuje zrobić coś w tym stylu:
Jeśli klient podłączony jako drugi (i = 2) wyśle wiadomość do serwera,
to serwer wysyła klientowi podłączonemu jako pierwszy (i = 1) jakąś wiadomość.
Wielka prośba aby ktoś mi pomógł i nakierował mnie na jakieś rozwiązanie.
Siedzę już nad tym sporo czasu i nie mogę wymyślić rozwiązania.
Kod programów:
Server:
import java.io.*;
import java.net.*;
import java.util.*;
class WatekGracza extends Thread
{
int numerGracza;
Socket socket;
WatekGracza(Socket socket, int nr)
{
this.socket = socket;
numerGracza = nr;
}
public void run()
{
try {
PrintWriter out = new PrintWriter(
new OutputStreamWriter(
socket.getOutputStream()),true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
int liczbaKlienta;
String komunikat, odpowiedz="";
while(true)
{
komunikat = in.readLine();
System.out.println("Klient strzelił w:" + komunikat);
liczbaKlienta = Integer.parseInt(komunikat);
if(Server.ktosZgadl != -1)
{
odpowiedz = "Przegrales, szybszy byl gracz numer " + Server.ktosZgadl;
}
else if(Server.liczba > liczbaKlienta) odpowiedz = "Za mało";
else if(Server.liczba < liczbaKlienta) odpowiedz = "Za dużo";
else if(Server.liczba == liczbaKlienta)
{
odpowiedz = "Zgadłeś";
Server.ktosZgadl = numerGracza;
}
out.println(odpowiedz);
}//koniec pętli while(true)
} catch(Exception e) { System.out.println(e);}
}//koniec funkcji uruchom()
}
public class Server
{
public static int ktosZgadl = -1;
public static int liczba;
public static final int serverPort = 2020;
private int i;
ServerSocket s;
/* Konstruktor próbuje utworzyć gniazdo */
Server()
{
try{
s = new ServerSocket(serverPort);
System.out.println("Serwer dziala");
}catch(Exception e) {
System.out.println("Nie można utworzyć gniazda");
System.exit(1);
}
}
void uruchom() throws Exception
{
Random los = new Random();
liczba = los.nextInt(101);
while(true)
{
Socket socket = s.accept();
WatekGracza gracz = new WatekGracza(socket, ++i);
gracz.start();
}
}//koniec funkcji uruchom()
public static void main(String args[]) throws Exception
{
Server server = new Server();
server.uruchom();
server.s.close();
}
}
Client:
import java.io.*;
import java.net.*;
import java.util.*;
public class Client
{
private Socket socket;
/* Konstruktor próbuje połączyć się z serwerem */
Client()
{
try {
socket = new Socket("localhost", 2020);
System.out.println("Klient dziala");
}
catch(IOException e) {
System.out.println("Uruchom serwer");
System.exit(1);
}
}
void uruchom() throws Exception
{
PrintWriter out = new PrintWriter(
new OutputStreamWriter(
socket.getOutputStream()),true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
Scanner czytacz = new Scanner(System.in);
/* 2. Działanie klienta */
String liczba, odSerwera;
while(true) {
System.out.println("Podaj zgadywaną liczbę: ");
liczba = czytacz.nextLine();
out.println(liczba);
odSerwera = in.readLine();
System.out.println(odSerwera);
if(odSerwera.equals("Zgadłeś")
|| odSerwera.startsWith("Przegrales"))
break;
}
/* 3. Czynności po zakończeniu współpracy z serwerem */
socket.close();
}//koniec funkcji uruchom()
public static void main(String args[]) throws Exception
{
Client client = new Client();
client.uruchom();
}
}
Pozdrawiam!
niezdecydowanyniezdecydowany