2016-04-14 72 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(),因为字符串中没有“新行”字符

相关问题