繁体   English   中英

网际网路讯息中断

[英]Netty message cut off

我有一个使用Netty 4.0.39的Java HTTP服务器

当我在HttpResponse中发送大字符串时,C#客户端仅接收四分之一的发送数据。

用java发送数据的方法是

    FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, status);
    response.headers().set(HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.GZIP);
    response.headers().set(HttpHeaders.Names.CONTENT_TYPE, "application/octet-stream; charset=UTF-8");
    response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, finalEncoded.length());
    response.content().writeBytes(Unpooled.copiedBuffer(finalEncoded, CharsetUtil.UTF_8));
    channel.writeAndFlush(response);

我谈论的大小最大为1000000字节。 大多数情况下,消息总是在同一时间被切断

编辑

读取消息的C#代码

private byte[] makeRequest(byte[] data, int timeout = 0) 
{ 
     WebRequest req = WebRequest.Create(uri); 
     req.Method = "POST"; 
     ((HttpWebRequest)req).ProtocolVersion = HttpVersion.Version11; 
     if (UseProxy && webProxy != null) 
     { 
        req.Proxy = webProxy; 
        req.PreAuthenticate = false; 
        //req.UseDefaultCredentials = false; 
     } 
     req.ContentLength = data.Length; 
     if (timeout > 0) 
     { 
        req.Timeout = timeout; 
     } 
     using (var stream = req.GetRequestStream()) 
     { 
        stream.Write(data, 0, data.Length); 
        stream.Close(); 
     } 
     lock (requestsLock) 
     { 
        openWebRequests.Add(req); 
     } 
     byte[] responseBytes = null; 
     try 
     { 
        using (var response = req.GetResponse()) 
        { 
            if (response == null) return null; 
            responseBytes = ReadFully(response.GetResponseStream()); 
        } 
      } 
      catch (Exception e) 
      { 
        Log(MessagingTypes.ProtocolLevels.Exceptions, e.Message); 
        return null; 
      } 
      return responseBytes; 
} 


private byte[] ReadFully(Stream input)
{
     using (MemoryStream ms = new MemoryStream())
     {
             input.CopyTo(ms);
             return ms.ToArray();
     }
}

我们最终将包作为HttpChunks发送。 之后,一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM