2014-09-01 45 views
3

我正在浏览Java TCP Client Server tutorials,他们正在解释echo服务器是如何工作的以及TCP客户端如何与echo服务器交互。这是java教程中的一个错字吗?

对于TCP客户端,他们给了这个片段,并说明它是什么:

String hostName = args[0]; 
int portNumber = Integer.parseInt(args[1]); 

try (
    Socket echoSocket = new Socket(hostName, portNumber); 
    PrintWriter out = 
     new PrintWriter(echoSocket.getOutputStream(), true); 
    BufferedReader in = 
     new BufferedReader(
      new InputStreamReader(echoSocket.getInputStream())); 
    BufferedReader stdIn = 
     new BufferedReader(
      new InputStreamReader(System.in)) 
) 

以后,下面的几行(约8行),他们说:

要通过套接字将数据发送到服务器,EchoClient示例需要写入PrintWriter。为了得到服务器的响应,EchoClient从BufferedReader对象中读取stdIn,它是在try-with resources语句中的第四个语句中创建的。

为什么它说

要获得服务器的响应,EchoClient从BufferedReader类对象标准输入

是不是stdIn用于从系统的标准输入,而不是读书读套接字的标准输入? Echo客户端是否应该从in BufferedReader中读取?

如果我错了,你能澄清我的误解吗?

http://docs.oracle.com/javase/tutorial/networking/sockets/readingWriting.html


编辑

也许我不是足够清晰。当客户端必须从服务器获取数据时。是否得到它的形式是:

BufferedReader in = 
      new BufferedReader(
       new InputStreamReader(echoSocket.getInputStream())); 

或本:

BufferedReader stdIn = 
      new BufferedReader(
       new InputStreamReader(System.in)) 

的文档从第二个说。这没有意义,它应该是第一个

+1

你永远不会_write_到标准_input_流。 – Mat 2014-09-01 20:37:57

+0

@Mat是的,你是对的!错过我的结局。 – Krimson 2014-09-01 20:40:47

+0

将链接添加到实际的javadoc会很有用,但我认为你是对的,它是不正确的。 – wvdz 2014-09-01 20:43:27

回答

2

EchoClient是一种简单的shell应用程序(如telnet)。它允许用户输入一些内容到控制台,客户端从STDIN中读取这些信息并通过套接字发送到服务器。所以,我认为教程正确解释了一切。

EDIT

客户端是使用输入流in并使用流stdIn读取用户的命令读取来自服务器的响应。看看你发布的源代码。

+0

'客户端从STDIN中读取并通过套接字发送给服务器。'我得到这个部分,但是当客户端必须从服务器获得响应/数据时呢?它会从服务器的“stdIn”右边读取? – Krimson 2014-09-01 20:48:07

+0

请参阅我的编辑原始帖子。我希望这有帮助。 – AlexR 2014-09-01 20:54:38

+0

这正是我的预期。那么为什么本教程说'为了得到服务器的响应,EchoClient从BufferedReader对象stdIn'中读取。不应该为了得到服务器的响应,EchoClient从''中的BufferedReader对象中读取'? – Krimson 2014-09-01 20:56:15

1
BufferedReader stdIn = 
     new BufferedReader(
      new InputStreamReader(System.in)) 

stdIn是在那里定义的,它与System.in不一样。

+0

是的,但客户端如何从服务器读取数据?来自'BufferedReader stdIn'或'BufferedReader in'? – Krimson 2014-09-01 20:53:09

+0

让我改述你的问题。 “客户端如何从服务器读取数据?从连接到服务器的套接字(in)或客户端的本地标准输入流?(stdIn)” – Gimby 2014-09-01 21:32:21

+1

哦,我现在看到您的观点了。是的,这似乎是一个错字。 (我正在检查教程页面上的代码,并确实从“in”中读取)。 – folkol 2014-09-01 21:38:42