首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Netty SocketServer获取日期

从Netty SocketServer获取日期
EN

Stack Overflow用户
提问于 2015-07-01 08:15:23
回答 1查看 78关注 0票数 0

我有一个通过Netty.io创建的简单套接字服务器,当我从终端写东西时,一切都像魅力一样工作。但是我也有一个定制的套接字客户端,不使用netty.io,以及如何从netty服务器获取数据?这是我的网络处理程序:

代码语言:javascript
复制
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);
        }
    }

}

这是我的客户端套接字类:

代码语言:javascript
复制
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)行读取数据。还有别的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-02 15:03:04

首先,我假设您正确地设置了ChannelPipeline并触发了channelRead0fromServer.readLine()被阻塞了,它读取一个行提要('\n'),一个回车('\r'),或者一个回车返回,紧接着是一个行提要。

那么问题是你应该回应

代码语言:javascript
复制
ctx.writeAndFlush("Response from server\n");

如果事件没有触发,请尝试这样设置您的ChannelPipeline

代码语言:javascript
复制
ch.pipeline().addLast(
    new StringDecoder(),
    new StringEncoder(),
    new DiscardServerHandler());

然后终止响应字符串,您的客户端将正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31155999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档