2016-04-14 85 views
0

我已經寫了簡單的Java客戶端/服務器程序和客戶端試圖像下面發送「\ n \ n」:爲什麼看完後服務器端套接字沒有收到消息

os = new DataOutputStream(socket.getOutputStream()); 
os.writeBytes("HELO\n");  
os.writeBytes("MAIL From: [email protected]\n"); 
os.writeBytes("RCPT To: [email protected]\n"); 
os.writeBytes("DATA\n"); 
os.writeBytes("From: [email protected]\n"); 
os.writeBytes("Subject: testing\n"); 
os.writeBytes("Hi there\n"); // message body 
os.writeBytes("\n.\n"); 
os.writeBytes("QUIT"); 

但我的服務器端套接字能夠讀到「\ n」。然後它正在等待閱讀。

爲什麼不讀 「QUIT」 消息後

Server代碼 「\ n \ n」:

clientSocket = echoServer.accept(); 
    is = new DataInputStream(clientSocket.getInputStream()); 
    os = new PrintStream(clientSocket.getOutputStream()); 
    // As long as we receive data, echo that data back to the client. 
    while (true) { 
    line = is.readLine(); 
    os.println(line); 
    } 
+1

也許您想嘗試'BufferedReader.readLine()'而不是使用DataInputStream。請參閱文檔:https://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html瞭解爲什麼您不應該使用'DataInputStream' – bili

+0

這不適用於真正的郵件服務器。 SMTP中的行結束符被定義爲'\ r \ n',而不是'\ n'。 – EJP

回答

1

你需要把一個 「\ n」 退出之後,流讀取QUIT,但它不會導致is.readLine(),因爲字符串中沒有「新行」字符

相關問題