我正在浏览Java TCP Client Server tutorials,他们在其中解释回显服务器的工作方式以及TCP客户端与回显服务器的交互方式.
对于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行)中说:
To send data through the socket to the server, the EchoClient example needs to write to the PrintWriter. To get the server’s response, EchoClient reads from the BufferedReader object stdIn, which is created in the fourth statement in the try-with resources statement.
为什么这么说
To get the server’s response, EchoClient reads from the BufferedReader object stdIn
stdIn不用于从系统的标准输入而不是套接字的标准输入中读取吗? Echo客户端应该从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))
医生从第二个说.那没有道理,应该是第一个
解决方法:
EchoClient是一种简单的shell应用程序(如telnet).它允许用户键入要控制台的内容,客户端从STDIN读取并通过套接字发送到服务器.因此,我认为本教程可以正确解释所有内容.
编辑
客户端使用输入流从服务器读取响应,并使用流stdIn读取用户的命令.看一下您发布的源代码.