0

所以我得到了一个 Server.jar 文件,它运行一个井字游戏服务器。我现在要做的是通过 TCP Socket 连接到这个服务器并发送 HTTP 请求(例如“GET /game/ HTTP/1.1”),并接收 tictactoe 字段。

现在我似乎能够连接到服务器,并发送第一个请求。然而,我的第二个 out.write 似乎要么被忽略,要么导致异常。我不明白为什么......服务器似乎也没有响应第二条消息/请求。

 Socket sock;
        try 
        {
            sock = new Socket("127.0.0.1",8080);
            System.out.println("Connection established at "+sock.toString());
            Scanner in = new Scanner(sock.getInputStream());//Step 2.

            PrintWriter out =new PrintWriter(sock.getOutputStream(),true);//Step 2.
            out.println("GET /game/ HTTP/1.1\nHost: 127.0.0.1\nConnection: keep-alive\n\n");        
            String test ="";            
            while( (in.hasNext())== true)       
            {        
                test = test + in.nextLine();        
            }

            System.out.println(test);
            //This one is ignored somehow.
            out.println("GET /game/gamenumber HTTP/1.1\nHost: 127.0.0.1\n\n");


            while( (in.hasNext())== true)       
            {        
                test = test + in.nextLine();        
            }



            System.out.println(test);

            out.close();
            sock.close();    




        }
        catch (IOException e)
        {
             System.out.println("Failed");
             e.printStackTrace();


        }

注意:我没有直接访问服务器源代码的权限,并且不允许使用 HTTPURLCONNECTION。

4

2 回答 2

1

java.net.SocketException:软件导致连接中止:套接字写入错误

这通常是由于写入已被另一端关闭的连接造成的。由于您没有发送内容长度标头,因此服务器在第一次请求后关闭了连接。

HTTP 中的行终止符是 \r\n,而不是 \n。

您需要仔细查看 HTTP 1.1 协议 RFC。或者使用 HttpURLConnection,它将完全为您处理。除非这是家庭作业并且您需要自己实现 HTTP 1.1,这看起来很奇怪,否则拒绝您使用 JDK 中实际上专门为这个问题设计的一个类也是很奇怪的。

于 2013-05-30T23:44:29.660 回答
-2

尝试在每个 println 之后添加 out.flush()。

于 2013-05-30T16:31:57.293 回答