我有一个通过Netty.io创建的简单套接字服务器,当我从终端写东西时,一切都像魅力一样工作。但是我也有一个定制的套接字客户端,不使用netty.io,以及如何从netty服务器获取数据?这是我的网络处理程序:
public class DiscardServerHandler extends SimpleChannelInboundHandler<String> {
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, String message) throws Exception {
String msg = message;
try {
System.out.println(msg);
System.out.flush();
ctx.writeAndFlush("Response from server");
} finally {
ReferenceCountUtil.retain(msg);
}
}
}这是我的客户端套接字类:
public class ClientSideSocket2 {
public static void main(String[] args) {
String serverName = "localhost";
int port = 9999;
String line = "";
Socket client = null;
PrintWriter toServer = null;
BufferedReader fromServer = null;
try {
System.out.println("Connecting to " + serverName + " on port " + port);
client = new Socket(serverName, port);
System.out.println("Just connected to " + client.getRemoteSocketAddress());
toServer = new PrintWriter(client.getOutputStream(), true);
fromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));
for (int i = 0; i < 6; i++) {
toServer.println("simple string: " + i);
if ((line = fromServer.readLine()) != null) {
System.out.println("Responce from server: " + line);
}
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
toServer.close();
fromServer.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}我无法从if ((line = fromServer.readLine()) != null)行读取数据。还有别的办法吗?
发布于 2015-07-02 15:03:04
首先,我假设您正确地设置了ChannelPipeline并触发了channelRead0。fromServer.readLine()被阻塞了,它读取一个行提要('\n'),一个回车('\r'),或者一个回车返回,紧接着是一个行提要。
那么问题是你应该回应
ctx.writeAndFlush("Response from server\n");如果事件没有触发,请尝试这样设置您的ChannelPipeline:
ch.pipeline().addLast(
new StringDecoder(),
new StringEncoder(),
new DiscardServerHandler());然后终止响应字符串,您的客户端将正常工作。
https://stackoverflow.com/questions/31155999
复制相似问题