Java를 사용하여 소켓을 배우려고합니다. 내 컴퓨터에서 실행중인 ServerSocket에 데이터를 성공적으로 보냈습니다. readline을 사용하여이 소켓에서 읽으려고 시도 할 때 (즉, 내 보낸 메시지를 반향시킬 수 있음) 프로그램이 중단되어 반환되지 않습니다.BufferedReader readLine 메서드가 응답을 멈추고 프로그램을 차단합니다.
여기에 코드입니다 :
public static void main(String[] args) throws UnknownHostException, IOException {
TCPClient cli = new TCPClient("127.0.0.1", "15000");
try {
cli.ostream.writeUTF("Teste");
String echo = cli.istream.readLine(); //it hangs in this line
System.out.println(echo);
}
하여 TcpClient 내가 그래서 난 내 homwework에 스윙을 사용하기 전에 간단한 인터페이스에 내 프로그램을 테스트 할 수 있습니다 정의 된 클래스입니다. 여기에 코드가 있습니다 :
public class TCPClient {
public DataOutputStream ostream = null;
public BufferedReader istream = null;
public TCPClient(String host, String port) throws UnknownHostException {
InetAddress ip = InetAddress.getByName(host);
try {
Socket socket = new Socket(host, Integer.parseInt(port));
ostream = new DataOutputStream(socket.getOutputStream());
istream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException ex) {
Logger.getLogger(TCPClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
제 서버는 매우 간단합니다. 연결이 설정되면이 루프에 들어가서 클라이언트가 닫힐 때까지 여기에 머물러 있습니다 (무한 루프 때문에). 그 후, 일부 예외 처리는 연결이 시작되기 전에이를 처리합니다.
while(true){
String msg = istream.readLine();
System.out.println("Arrived on server: " + msg); //just works on debug
ostream.writeUTF("ACK: " + msg);
ostream.flush();
}
실종보고 싶지 않습니다.
추신 : 만약 내가 서버를 디버깅하면 메시지 도착을 볼 수 있습니다 (예를 들어 인쇄 할 수 있습니다).하지만이 코드를 실행하면 불가능합니다. 이것은 내가 간과하고있는 동시성 관계를 가지고 있습니까?
들으
서버의 기능은 무엇입니까? 메시지에 아무것도 응답하지 않거나 쓰기를 플러시하지 않으면 클라이언트는 서버에서 회선이 전송 될 때까지 무기한 대기합니다. –
메시지를 반향하는 동안 서버의 무한 루프로 게시물을 편집합니다 –