Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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
Can';t获取流1:在Java 11 HTTP/2客户端中读取时达到EOF_Java_Httpclient_Http2_Java 11 - Fatal编程技术网

Can';t获取流1:在Java 11 HTTP/2客户端中读取时达到EOF

Can';t获取流1:在Java 11 HTTP/2客户端中读取时达到EOF,java,httpclient,http2,java-11,Java,Httpclient,Http2,Java 11,我目前正在学习Java11中的HTTP/2客户端(Java.net.HTTPmodule) 我的目的是使用Java11HTTP/2客户端向本地服务器发送POSTJSON数据,但我发生了一些IOException,eofeexception 例外情况 Exception in thread "main" java.io.IOException: Can't get stream 1: java.io.EOFException: EOF reached while reading at ja

我目前正在学习Java11中的HTTP/2客户端(
Java.net.HTTP
module)

我的目的是使用Java11HTTP/2客户端向本地服务器发送
POST
JSON
数据,但我发生了一些
IOException
eofeexception

例外情况

Exception in thread "main" java.io.IOException: Can't get stream 1: java.io.EOFException: EOF reached while reading
    at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:565)
    at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
    at study/study.Http2ClientSample4.main(Http2ClientSample4.java:37)
Caused by: java.io.IOException: Can't get stream 1: java.io.EOFException: EOF reached while reading
    at java.net.http/jdk.internal.net.http.Exchange.lambda$checkForUpgradeAsync$12(Exchange.java:486)
    at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
    at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
    at java.net.http/jdk.internal.net.http.Exchange.lambda$checkForUpgradeAsync$13(Exchange.java:474)
    at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
    at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
    at java.net.http/jdk.internal.net.http.Exchange.checkForUpgradeAsync(Exchange.java:467)
    at java.net.http/jdk.internal.net.http.Exchange.lambda$wrapForUpgrade$10(Exchange.java:432)
    at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
    at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
    at java.net.http/jdk.internal.net.http.Exchange.wrapForUpgrade(Exchange.java:432)
    at java.net.http/jdk.internal.net.http.Exchange.sendRequestBody(Exchange.java:399)
    at java.net.http/jdk.internal.net.http.Exchange.checkFor407(Exchange.java:354)
    at java.net.http/jdk.internal.net.http.Exchange.lambda$responseAsyncImpl0$7(Exchange.java:423)
    at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)
    at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1705)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.io.EOFException: EOF reached while reading
    at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onComplete(Http2Connection.java:1336)
    at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$ReadSubscription.signalCompletion(SocketTube.java:632)
    at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$InternalReadSubscription.read(SocketTube.java:833)
    at java.net.http/jdk.internal.net.http.SocketTube$SocketFlowTask.run(SocketTube.java:175)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:271)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:224)
    at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$InternalReadSubscription.signalReadable(SocketTube.java:763)
    at java.net.http/jdk.internal.net.http.SocketTube$InternalReadPublisher$ReadEvent.signalEvent(SocketTube.java:941)
    at java.net.http/jdk.internal.net.http.SocketTube$SocketFlowEvent.handle(SocketTube.java:245)
    at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.handleEvent(HttpClientImpl.java:957)
    at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.lambda$run$3(HttpClientImpl.java:912)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
    at java.net.http/jdk.internal.net.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:912)
我的代码

Path testPath = Paths.get( System.getProperty( "user.dir" ), "jsonSample.txt" );
byte[] testb = Files.readAllBytes( testPath );
System.out.println( new String( testb ) );

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
                .uri( URI.create( "http://localhost:8080" ) )
                .header("Content-Type", "application/json")
                .header( "Accept", "application/json" )
//              .header( "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" )
                .POST( HttpRequest.BodyPublishers.ofFile( testPath ) )
                .build();

HttpResponse<?> response = client.send( request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.statusCode());
System.out.println(response.body());
Path testPath=Path.get(System.getProperty(“user.dir”),“jsonSample.txt”);
字节[]testb=Files.readAllBytes(testPath);
System.out.println(新字符串(testb));
HttpClient=HttpClient.newHttpClient();
HttpRequest请求=HttpRequest.newBuilder()
.uri(uri.create(“http://localhost:8080" ) )
.header(“内容类型”、“应用程序/json”)
.header(“接受”、“应用程序/json”)
//.header(“用户代理”、“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/58.0.3029.110 Safari/537.36”)
.POST(HttpRequest.bodypublisher.ofFile(testPath))
.build();
HttpResponse response=client.send(请求,HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());

我做错了什么

我遇到了同样的问题,但我发现它是随机发生的,您可以再试一次,在您提出请求时确定它是否确实发生。
如果没有,您可以使用try-catch捕获此异常并再次执行请求。

这可能是因为您的服务器不支持HTTP/2。尝试向HttpRequest添加
version(HttpClient.version.HTTP\u 1\u 1)

HttpRequest request = HttpRequest.newBuilder()
            .uri( URI.create( "http://localhost:8080" ) )
            .header("Content-Type", "application/json")
            .header( "Accept", "application/json" )
            .version(HttpClient.Version.HTTP_1_1)
            .POST( HttpRequest.BodyPublishers.ofFile( testPath ) )
            .build();

您的文件
“jsonSample.txt”
包括什么?该文件有{“firstName”:“John”,“lastName”:“Doe”,“age”:21}如果我使用
URI将其发布到示例web服务中,上述内容对我来说就很好了http://www.example.com/)
,本地服务实际应该做什么?它可能会对IO异常负责吗?哦。。谢谢你检查我的代码。我将检查我的本地服务器,然后评论。非常感谢。