建设厅试验员考试报名网站,自己电脑做局域网网站服务器,336633域名,青岛网站制作公司网络1.Netty服务端
服务端代码参考【基于Netty实现安全认证的WebSocket#xff08;wss#xff09;服务端-CSDN博客】
2.Netty客户端
客户端代码参考【基于Netty实现WebSocket客户端-CSDN博客】中两种都可以#xff1b;这里用的是第一种。
新增SslHandler的代码#xff1a; …1.Netty服务端
服务端代码参考【基于Netty实现安全认证的WebSocketwss服务端-CSDN博客】
2.Netty客户端
客户端代码参考【基于Netty实现WebSocket客户端-CSDN博客】中两种都可以这里用的是第一种。
新增SslHandler的代码
SslContext sslCtx SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();
...
pipeline.addLast(sslCtx.newHandler(sc.alloc(), webSocketURL.getHost(), webSocketURL.getPort()));
服务端地址的协议头调整为wss
final URI webSocketURL new URI(wss://127.0.0.1:7070/helloWs);
完整的客户端代码如下
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.http.DefaultHttpHeaders;
import io.netty.handler.codec.http.HttpClientCodec;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import io.netty.handler.codec.http.websocketx.WebSocketClientHandshakerFactory;
import io.netty.handler.codec.http.websocketx.WebSocketClientProtocolHandler;
import io.netty.handler.codec.http.websocketx.WebSocketVersion;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.handler.stream.ChunkedWriteHandler;
import lombok.extern.slf4j.Slf4j;import java.net.URI;
import java.util.concurrent.CountDownLatch;/*** https://blog.csdn.net/a1053765496/article/details/130701218* 基于Netty快速实现WebSocket客户端不手动处理握手*/
Slf4j
public class SimpleWssClient {final CountDownLatch latch new CountDownLatch(1);public static void main(String[] args) throws Exception {SimpleWssClient client new SimpleWssClient();client.test();}public void test() throws Exception {Channel dest dest();latch.await();dest.writeAndFlush(new TextWebSocketFrame(CountDownLatch完成后发送的消息));}public Channel dest() throws Exception {final URI webSocketURL new URI(wss://127.0.0.1:7070/helloWs);EventLoopGroup group new NioEventLoopGroup();SslContext sslCtx SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();Bootstrap boot new Bootstrap();boot.option(ChannelOption.SO_KEEPALIVE, true).option(ChannelOption.TCP_NODELAY, true).group(group).handler(new LoggingHandler(LogLevel.INFO)).channel(NioSocketChannel.class).handler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel sc) throws Exception {ChannelPipeline pipeline sc.pipeline();pipeline.addLast(sslCtx.newHandler(sc.alloc(), webSocketURL.getHost(), webSocketURL.getPort()));pipeline.addLast(new HttpClientCodec());pipeline.addLast(new ChunkedWriteHandler());pipeline.addLast(new HttpObjectAggregator(64 * 1024));pipeline.addLast(new WebSocketClientProtocolHandler(WebSocketClientHandshakerFactory.newHandshaker(webSocketURL, WebSocketVersion.V13, null, false, new DefaultHttpHeaders())));pipeline.addLast(new SimpleChannelInboundHandlerTextWebSocketFrame() {Overrideprotected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg)throws Exception {System.err.println( 客户端收到消息 msg.text());}Overridepublic void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {if (WebSocketClientProtocolHandler.ClientHandshakeStateEvent.HANDSHAKE_COMPLETE.equals(evt)) {log.info(ctx.channel().id().asShortText() 握手完成);latch.countDown();send(ctx.channel());}super.userEventTriggered(ctx, evt);}});}});ChannelFuture cf boot.connect(webSocketURL.getHost(), webSocketURL.getPort()).sync();return cf.channel();}public static void send(Channel channel) {final String textMsg 握手完成后直接发送的消息;if (channel ! null channel.isActive()) {TextWebSocketFrame frame new TextWebSocketFrame(textMsg);channel.writeAndFlush(frame).addListener((ChannelFutureListener) channelFuture - {if (channelFuture.isDone() channelFuture.isSuccess()) {log.info( 发送成功.);} else {channelFuture.channel().close();log.info( 发送失败. cause channelFuture.cause());channelFuture.cause().printStackTrace();}});} else {log.error(消息发送失败 textMsg textMsg);}}} 参考利用netty开发webScoketClient支持wss协议客户端、服务端心跳实现_websocketclient-CSDN博客