2014-01-22 2 views
0

Я должен сделать очень простой TCP-сервер, который слушает некоторого клиента с помощью TCP и возвращает сообщение в верхнем регистре.java-сокеты клиент отправляет на сервер, но не прослушивает

Соединение stablishes отлично, клиент отправляет сообщения отлично и сервер слушает их, но сервер не будет отвечать, и я не имею ни малейшего понятия о том, почему это происходит ...

Сервер:

//imports and stuff you don't really care about 

public class ServerThread extends Thread { 

private final Socket clientSocket; 
private final Main controller; 
private final Server server; 

BufferedReader in; 
PrintWriter out; 

//constructor 
ServerThread(Socket clientSocket, Main controller, Server server) throws IOException { 
    this.clientSocket = clientSocket; 
    this.controller = controller; 
    this.server = server; 
    //make input and output streams 
    in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

    //THIS MAY BE WRONG 
    out = new PrintWriter(clientSocket.getOutputStream()); 
} 

@Override 
public void run() { 

    controller.out("Connected: " + clientSocket.getInetAddress().toString()); 
    out.println("test"); 
    try { 
     String msg; 
     while ((msg = in.readLine()) != null) { 
      //Prints this line 
      System.out.println(clientSocket.getInetAddress().toString() + " says: " + msg); 
      //THIS MAY BE WRONG 
      out.println(msg.toUpperCase()); 

      System.out.println("Answered");//this line too 
     } 
    }catch(SocketException ex){ 
     destroyMe(); 
    } 
    catch (IOException ex) { 
     Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex); 
     destroyMe(); 
    } 
} 

//couple of methods that don't interfere here 
} 

Клиент:

public class Client extends Thread { 

private final String host = "localhost"; 
private final int port = 44444; 
private final PrintWriter out; 
private final Socket socket; 
BufferedReader in; 

private Main c; 

public Client(Main c) throws IOException { 
    this.c = c; 

    socket = new Socket(host, port); 
    out = new PrintWriter(socket.getOutputStream(), true); 
    in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

    System.out.println("Connection Opened."); 
} 

public void send(String str) { 
    out.println(str); //this works fine 
} 

@Override 
public void run() { 
    String msg; 
    while (true) { 
     try { 
      //THIS MAY BE WRONG but I don't think so 
      while ((msg = in.readLine()) != null) { 
       System.out.println("received: " + msg); //this never happens 
       c.out(msg); 
      } 
      //this line is always reached until I close the connection. 
     } catch (SocketException ex) { 
      System.out.println("Connection closed"); //this line is reached too 
      break; 
     } catch (IOException ex) { 
      Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
      //This works fine 
     } 
    } 
}//end of the thread 

//there are a couple of methods here but they don't do anything related 
} 

Я не вижу ничего плохого, но что-то должно быть.

Благодарим за помощь.

+0

Вы можете посмотреть на это: http://stackoverflow.com/questions/2165006/simple-java-client-server-program –

+0

Спасибо, на самом деле пытается другой вариант потока была логика вещь do ... Наверное, я был слишком запутан. –

ответ

0

Вы используете PrinterWriter для управления выводом кода вашего сервера.

Вы создаете его без автоматической промывки, включенный через out = new PrintWriter(clientSocket.getOutputStream()); Автоматическая промывка при включении, в документации, будет возникать, когда вы пишете сообщение с помощью методов println, printf или format.

Включите автоматическую промывку & используйте вышеуказанные методы, чтобы написать сообщение, вызвать метод очистки, когда вы хотите отправить сообщение, или использовать другой метод для управления потоком вывода сервера.

http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html

+0

Боюсь, я не могу проголосовать за твизера, но я очень благодарен, дата окончания этой школьной работы закончилась через два часа, и вы ее сохранили. Большое спасибо –

Смежные вопросы