Я пытаюсь написать программу, которая одновременно является TCP-клиентом и TCP-сервером, для передачи сообщений по распределенной сети. После того, как я смог подключить несколько экземпляров этих программ, я обнаружил, что не смог прочитать их из сокетов. Я упростил реализацию и все еще имею ту же проблему.TCP Client/Server в одном классе
Упрощенный код выглядит следующим образом:
public class Server {
public static void main(String[] args){
try {
ServerSocket ssocket = new ServerSocket(1234);
Socket socket = new Socket("localhost", 1234);
socket = ssocket.accept();
String data = "Hello World";
PrintWriter out;
out = new PrintWriter(socket.getOutputStream(), true);
System.out.print("Sending string: '" + data + "'\n");
out.print(data);
out.flush();
BufferedReader in = new BufferedReader(new
InputStreamReader(((Socket) socket).getInputStream()));
System.out.print("Received string: '");
while (!in.ready()) {}
System.out.println(in.readLine());
System.out.print("'\n...");
in.close();
} catch (UnknownHostException e2) {
e2.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
При выполнении кода я получаю следующий результат:
Sending string: 'Hello World'
Received string: '
Почему я не могу читать входной поток?
Спасибо, спасибо, я был под интерпретацией, что вам нужен только один сокет между сервером и клиентом, а ServerSocket возвращал тот же сокет. Я попытался реализовать следующее ... Socket Csocket = новое гнездо («localhost», 1234); Socket Ssocket = ssocket.accept(); out = new PrintWriter (Ssocket.getOutputStream(), true); BufferedReader in = new BufferedReader (новый InputStreamReader (((Socket) Csocket) .getInputStream())); И все еще не работает. Я предполагал, что в реальной реализации мне придется использовать потоки, но я думал, что смогу заставить это работать без потоков. – longshorts