写入Socket Java无法正常工作

时间:2013-05-30 14:06:26

标签: java sockets networking communication bufferedwriter

所以我得到了一个Server.jar文件,它运行一个tic tac toe服务器。 我现在应该做的是通过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。

2 个答案:

答案 0 :(得分:1)

  

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

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

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

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

答案 1 :(得分:-2)

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