我最近在学习如何创建套接字以连接到网络服务器。我已经设法用Java写了一些东西:
BufferedReader inUser = new BufferedReader(new
InputStreamReader(System.in));
Socket clientSocket = new Socket("www.google.com", 80); // url expected
DataOutputStream outServer = new DataOutputStream
(clientSocket.getOutputStream());
BufferedReader inServer = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
String sentence = inUser.readLine();
outServer.writeBytes(sentence + '\n');
String modifiedSentence = inServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
inUser.close();
outServer.close();
inServer.close();
clientSocket.close();
我也在使用socketTest程序(来自http://sockettest.sourceforge.net/)来测试我的客户端。连接似乎很好,我可以使用sockettest接收和发回消息(通过托管本地服务器)。当我尝试将一个字符串发送到一个web服务器时(在我的java代码中它被命名为'sentence'),它会像预期的那样返回对'sd'或'a'等随机输入的错误请求。但是,当我输入我希望收到反馈的查询时,我什么都收不到。可以肯定的是,这就是我输入的内容(存储在“句子”中):
GET index.html http/1.0
如果文件存在,我应该获取文件,如果出现问题,我应该获取异常,对吗?我没有收到任何东西。更奇怪的是,我注意到我第一次提供输入时,我只需要确保我有3个单独的随机字符串(用空格分隔)以使其被接受为有效输入。我之后输入的任何随机输入,如'sd'也将被接受。
我做的另一个观察是程序继续运行。通常我应该读一行然后程序停止。这意味着它无法读取任何内容。
我正在尝试使用端口80来访问所有页面。这是我尝试执行查询的一小部分网站: - www.google.com - en.wikipedia.org - www.cracked.com
我为了教程的唯一目的尝试了其他一些设置。我为什么不收到任何东西?当我尝试使用telnet时,似乎有些工作(尽管www.google.com总是返回xxx错误)。
答案 0 :(得分:2)
在刷新输出流之前尝试编写一个额外的“\ r \ n”:
BufferedReader inUser = new BufferedReader(new InputStreamReader(System.in));
URL url = new URL("http://www.google.com");
Socket clientSocket = new Socket(url.getHost(), 80); // url expected
OutputStream output = clientSocket.getOutputStream();
PrintWriter pw = new PrintWriter(output,false);
pw.print("GET index.html HTTP/1.0\r\n");
pw.print("\r\n");
pw.flush();
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String modifiedSentence = input.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);