我尝试在 Java 中打开 TCP 套接字并向服务器 (www.abc.net.au) 发送 GET 请求并将响应打印到控制台。客户端代码:import java.util.Scanner;import java.net.InetAddress;import java.net.SocketAddress;import java.net.InetSocketAddress;import java.net.Socket;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;public class Client { public static void main(String[] args) throws Exception{ Scanner sc; String addressString; int port =80; int timeoutMs = 30000; String temp; //Read address from commandline sc =new Scanner(System.in); System.out.print("Adresse: "); addressString = sc.next(); sc.close(); //Open socket InetAddress addr = InetAddress.getByName(addressString); SocketAddress sockaddr = new InetSocketAddress(addr, port); Socket socket = new Socket(); //Connection timeout socket.connect(sockaddr,timeoutMs); System.out.println( socket.getPort() +"\n"); //Define input/output BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); //Send GET request pw.print("GET / HTTP/1.1\r\n"); pw.print("Host: "+ addressString +"\r\n\r\n"); while((temp=br.readLine())!=null){ System.out.println(temp); } //Close Input/Output and Socket pw.close(); br.close(); socket.close(); }}代码似乎可以工作,直到它到达一段时间,然后我得到:HTTP/1.0 408 Request Time-outServer: AkamaiGHostMime-Version: 1.0Date: Sun, 07 Oct 2018 15:36:40 GMTContent-Type: text/htmlContent-Length: 218Expires: Sun, 07 Oct 2018 15:36:40 GMT我不明白是什么导致了这个问题,已经在 stackoverflow、java2s 和我在家里得到的一本书上寻找答案。尝试其他页面通常以:Process finished with exit code 0没有别的。知道我的请求缺少什么/不正确吗?欣赏每一个提示。
1 回答
Helenr
TA贡献1780条经验 获得超3个赞
PrintWriter具有用于存储数据的内部缓冲区,因此当您调用时print- 不会向服务器发送任何内容
来自https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html
与 PrintStream 类不同,如果启用自动刷新,则仅在调用println、printf或format方法之一时才会执行,而不是在碰巧输出换行符时执行。
因此,您可以使用这些方法代替print或直接调用flush:
pw.print("GET / HTTP/1.1\r\n");
pw.print("Host: " + addressString + "\r\n\r\n");
pw.flush(); // actually send data to server
添加回答
举报
0/150
提交
取消