Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
写入套接字Java不会';我不能正常工作_Java_Sockets_Networking_Communication_Bufferedwriter - Fatal编程技术网

写入套接字Java不会';我不能正常工作

写入套接字Java不会';我不能正常工作,java,sockets,networking,communication,bufferedwriter,Java,Sockets,Networking,Communication,Bufferedwriter,所以我得到了一个Server.jar文件,它运行一个tic-tac-toe服务器。 我现在要做的是通过TCP套接字和 发送HTTP请求(例如“GET/game/HTTP/1.1”),并接收TictaToe字段 现在我似乎能够连接到服务器,并发送第一个请求。 然而,我的第二个out.write似乎被忽略或导致异常。 我不明白为什么。。。服务器似乎也没有响应第二条消息/请求 Socket sock; try { sock = new Soc

所以我得到了一个Server.jar文件,它运行一个tic-tac-toe服务器。 我现在要做的是通过TCP套接字和 发送HTTP请求(例如“GET/game/HTTP/1.1”),并接收TictaToe字段

现在我似乎能够连接到服务器,并发送第一个请求。 然而,我的第二个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。

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


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

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

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


您需要仔细了解HTTP 1.1协议RFC。或者使用HttpURLConnection,它将完全为您提供服务。除非这是一个家庭作业,而且您必须自己实现HTTP 1.1(这似乎很奇怪),否则拒绝您使用JDK中的一个类也是很奇怪的,而这个类实际上正是针对这个问题设计的。

“或导致异常”-那么它是否会导致异常?如果是这样,请发布stacktrace(请显示您的
捕获
块…java.net.SocketException:软件导致的连接中止:套接字写入错误您应该使用
扫描仪
PrintWriter
,这更容易处理。(甚至是HttpURLConnection类)不,我必须在没有HTTP URL连接类的情况下完成这项工作…您的服务器可以通过web浏览器访问吗?(1)添加刷新无法解决“套接字写入错误”。(2)如果这是问题,它根本无法工作。(3)他在自动刷新模式下使用PrintWriter,因此额外的刷新()不会起任何作用。-1