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 如何在Netty中处理来自远程服务器的响应?_Java_Sockets_Asynchronous_Netty_Nio - Fatal编程技术网

Java 如何在Netty中处理来自远程服务器的响应?

Java 如何在Netty中处理来自远程服务器的响应?,java,sockets,asynchronous,netty,nio,Java,Sockets,Asynchronous,Netty,Nio,我为如何在Netty客户端上读取字符串响应苦苦挣扎了两天(我是Netty的新手)。问题是: 我必须连接到一个外部服务器,它的主机是“api.xxx.xx”,端口是8443 服务器请求有自己的消息协议(如代码所示-json格式的[,]数组) 服务器响应看起来类似(json格式也一样) 嗯。。。当我使用普通的Java套接字时,一切正常(相应的代码被注释)。但是,当我尝试使用Netty异步套接字编程时,什么都没有发生:(我做错了什么 公共类客户端 { 私有静态最终StringDecoder解码器

我为如何在Netty客户端上读取字符串响应苦苦挣扎了两天(我是Netty的新手)。问题是:

  • 我必须连接到一个外部服务器,它的主机是“api.xxx.xx”,端口是8443
  • 服务器请求有自己的消息协议(如代码所示-json格式的[,]数组)
  • 服务器响应看起来类似(json格式也一样)
嗯。。。当我使用普通的Java套接字时,一切正常(相应的代码被注释)。但是,当我尝试使用Netty异步套接字编程时,什么都没有发生:(我做错了什么

公共类客户端
{
私有静态最终StringDecoder解码器=新StringDecoder();
私有静态最终StringEncoder编码器=新StringEncoder();
公共静态void main(字符串[]args)引发异常
{
字符串数据=“[\“get\”,\“/products/{id}\”,{\“$data\”:{\“id\”:“561e33873dd9172f64814a3e\”,“$client\”:“lucas\”,“$key\”:“04pRgDl9H\”)\n;
/*SocketFactory=SSLSocketFactory.getDefault();
Socket=factory.createSocket(“api.schema.io”,8443);
System.out.println(socket.isConnected());
OutputStream输出=socket.getOutputStream();
PrintWriter=新的PrintWriter(输出);
DataInputStream输入=新的DataInputStream(socket.getInputStream());
writer.write(“[\'get\”、“/products/{id}\”、{\'$data\”:{\'id\”:“561e33873dd9172f64814a3e\”、“$client\”:“lucas\”、“$key\”:“04PRGDL9HNZJCXKMWebM3XO5QQCY127VVTBIS\”)\n);
writer.flush();
字节b;
ByteBuffer bb=ByteBuffer.allocate(2048);
而((b=input.readByte())!='\n'){
bb.put(b);
}
//我得到了正确的回答:
//{“$links”:{“variants”:{“url”:“/products:variants?parent_id={id}}”,bundle_项目:{“links”:{“*”:{“product”:“{“url”:“/products/{products_id}}}},images”:{“links”:{“*”:{“file”:{“links”:{“data”:{“url”:“/{files/{id}/data}}}”,categories:{“url”:“/{”categories/{“categories”/{“categories”},categories][id},categories”:“},categories”:“{“products”:“{url:{id}}股票”:“{url},股票”{“/products:stock?parent_id={id}”,reviews:{“url”:“/products:reviews?parent_id={id},$url:“/products/561e33873dd9172f64814a3e”,“$collection:”com.products“,“$data:{“name:”iPhone”,“price:”3200,“sale_price:”3599,“type:“standard”,“bundle:”false,“virtual:”false,“delivery:”ship:“ship:”sku:“12”,“code:”12334”,“tax:”class:“standard”,“slug”,“slug:”iphone,“变量”:true,“股票跟踪”:true,“货币”:“BRL”,“创建日期”:“2015-10-14T10:50:47.044Z”,“活动”:false,“id”:“561e33873dd9172f64814a3e”},“$time”:4,$status”:200}
System.out.println(新字符串(bb.array());
input.close();
writer.close();
socket.close()*/
EventLoopGroup workerGroup=新的NioEventLoopGroup();
引导b=新引导();
b、 组(工作组);
b、 通道(NioSocketChannel.class);
b、 选项(ChannelOption.SO_KEEPALIVE,true);
b、 处理程序(新的ChannelInitializer(){
@凌驾
受保护的void initChannel(SocketChannel ch)引发异常{
ChannelPipeline=通道管道();
pipeline.addLast(解码器);
pipeline.addLast(编码器);
//在这里,我需要阅读响应…但执行甚至没有到达这里…:(
addLast(新的SimpleChannelInboundHandler()){
@凌驾
受保护的无效channelRead0(ChannelHandlerContext ctx,字符串msg)引发异常{
System.out.println(“响应已到达!”);
System.out.println(msg);
}
});
}
});
//启动客户端。
通道c=b.connect(“api.schema.io”,8443.sync().Channel();
c、 writeAndFlush(数据);
c、 closeFuture().sync();
workerGroup.shutdownGracefully();
}

}
您是否已启用记录器并检查是否收到消息?@Sneh否!我会尝试一下。如果您未在此处使用netty,请访问netty项目的文档页面