当前位置: 首页 > 知识库问答 >
问题:

从Netty SocketServer获取日期

栾烨华
2023-03-14

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

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).有其他方法吗?

共有1个答案

安毅
2023-03-14

首先,我假设您正确设置了ChannelPipeline,并且触发了channelRead0fromerver.readLine()被阻塞,直到它读取换行(\n)、回车(\r)或回车,然后立即换行。

那么问题是你应该做出回应

ctx.writeAndFlush("Response from server\n");

如果事件未触发,请尝试通过以下方式设置您的ChannelPipeline

ch.pipeline().addLast(
    new StringDecoder(),
    new StringEncoder(),
    new DiscardServerHandler());

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

 类似资料:
  • 问题内容: 我从ResultSet获取Date对象时遇到问题。在数据库中,它具有一个值(例如2014-08-01),并且从resultSet获取它之后,它具有另一个值(2014-08-31)。我知道ResultSet的getDate方法返回java.sql.Date,但是我尝试了一些解决方案,例如: 或 但问题是相同的。如果尝试 ,则抛出NullPointerException。 有人可以解释吗?

  • 问题内容: 我有一个PHP日期格式,我想以相同格式获取明天日期,例如。 PHP怎么可能? 问题答案: 使用日期时间 要么: 要么: 或在PHP 5.4+中:

  • 问题内容: 我在表中有字段。它包含的值为“ 2009-12-30 11:47:20:297”,我有这样的查询: 尽管今天的日期存在一行,但是在执行上述查询时我没有得到这一行。有人可以帮忙吗? 问题答案: 您的查询未返回期望的行的原因是因为GETDATE()返回了执行查询时的日期和时间部分。列中的值与时间部分不匹配,因此不会返回任何行。 有多种构造查询的方法,以便查询仅基于日期组件来评估日期。这是一

  • 问题内容: 即时通讯正在处理日期,并且我在从字符串中获取日期时遇到问题,我在这里简化了我的问题: 输出为:“ 25-05-2015”(可以),“ 2014年12月21日,上午12:00”(???) 问题答案: 那里的问题是为了。您必须使用。顺便说一句,不要忘记将日期格式设置的语言环境设置为“ en_US_POSIX” 。 如果您使用固定格式的日期,则应首先将日期格式器的语言环境设置为适合您的固定格

  • 问题内容: 这是我要传递时间戳的Under函数,我只需要从时间戳返回的日期,而不是小时和秒。通过以下代码,我得到了- 这是我得到的输出。 但是我只需要这样的日期 有什么建议? 问题答案: 改用SimpleDateFormat: 更新 :Java 8解决方案:

  • 您能告诉我如何将转换为吗?