我在學習使用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();
}
我看不到我在想什麼。
PS:奇怪的是,如果我調試服務器,我可以看到消息到達那裏(例如我可以打印它),但如果我只是運行此代碼,這是不可能的。這是否有一些我忽略的併發關係?
THX
服務器是做什麼的?如果它沒有回覆你的消息,或者沒有刷新它的寫入,那麼當然客戶端將無限期地等待直到從服務器發送一行。 –
我將用服務器的無限循環編輯帖子,同時回覆消息 –