package com.persagy.socket; import java.net.InetSocketAddress; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; import io.netty.util.CharsetUtil; import lombok.extern.slf4j.Slf4j; /** * * @version 1.0.0 * @company persagy * @author zhangqiankun * @date 2021年10月12日 上午10:06:34 */ @Slf4j public class IotSocketClient { public static final EventLoopGroup GROUP = new NioEventLoopGroup(1); public static final Bootstrap BS = new Bootstrap(); static { // 注册线程池、使用NioSocketChannel来作为连接用的channel类 BS.group(GROUP).channel(NioSocketChannel.class); } public static boolean connectAndSend(String host, int port, String command) { boolean result = false; ChannelFuture cf = null; try { BS.remoteAddress(new InetSocketAddress(host, port)) // 绑定连接端口和host信息 .handler(new ChannelInitializer() { // 绑定连接初始化器 @Override protected void initChannel(SocketChannel ch) throws Exception { log.info("正在连接中..."); ch.pipeline().addLast(new StringEncoder(CharsetUtil.UTF_8)); ch.pipeline().addLast(new StringDecoder(CharsetUtil.UTF_8)); ch.pipeline().addLast(new IotClientHandler(command)); } }); cf = BS.connect().sync(); // 异步连接服务器 log.info("服务端连接成功..."); result = true; } catch (Exception e) { log.error("与服务端建立连接失败", e); } finally { if (cf != null) { try { cf.channel().closeFuture().sync(); log.info("连接已关闭.."); } catch (Exception e2) { log.error("未知异常", e2); } } } return result; } public static void main(String[] args) throws Exception { IotSocketClient.connectAndSend("192.168.100.102", 30054, "(5001120003;1;report;20220617100000;17107;ZD1060;1;902;155)"); } }