[英]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.