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;
}
}