当前位置: 首页 > news >正文

做一个15页的网站怎么做在什么网站做推广最好

做一个15页的网站怎么做,在什么网站做推广最好,用代码怎么做网站,百度怎么推广自己的视频文章目录 前言服务端相关配置核心代码 客户端 前言 环境#xff1a; JDK#xff1a;64位 Jdk1.8 SpringBoot#xff1a;2.1.7.RELEASE 功能#xff1a; 使用Java中原生的NIO监听端口接受客户端的数据#xff0c;并发送数据给客户端。 服务端 相关配置 application.ym… 文章目录 前言服务端相关配置核心代码 客户端 前言 环境 JDK64位 Jdk1.8 SpringBoot2.1.7.RELEASE 功能 使用Java中原生的NIO监听端口接受客户端的数据并发送数据给客户端。 服务端 相关配置 application.yml socket:port: 9991bufferSize: 2048timeout: 3000配置类 import lombok.Getter; import lombok.Setter; import lombok.ToString; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;/*** author qf* since 2024/10/08 21:20*/ Component ConfigurationProperties(prefix socket) Setter Getter ToString public class NioSocketConfig {private Integer port;private Integer bufferSize;private Integer timeout; }核心代码 CommandLineRunner 当应用程序启动时CommandLineRunner 接口的实现类中的 run 方法会被调用 import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component;/*** author qf* since 2024/10/08 21:25*/ Slf4j Component public class CommandLineRunnerImpl implements CommandLineRunner {private NioSocketConfig nioSocketConfig;Autowiredpublic CommandLineRunnerImpl(NioSocketConfig nioSocketConfig) {this.nioSocketConfig nioSocketConfig;}Overridepublic void run(String... args) {ServerSelector serverSelector new ServerSelector(nioSocketConfig);log.info(-----------监听端口启动成功-----------);serverSelector.server();} }服务类 import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.util.Iterator;/*** NIO Socket Server* author qf* since 2024/10/08 21:30*/ Slf4j public class ServerSelector {private NioSocketConfig nioSocketConfig;public ServerSelector(NioSocketConfig nioSocketConfig){this.nioSocketConfig nioSocketConfig;}Beanpublic void server() {Selector selector null;Protocol protocol null;try {// 实例化一个信道ServerSocketChannel serverSocketChannel ServerSocketChannel.open();// 将该信道绑定到指定端口serverSocketChannel.bind(new InetSocketAddress(nioSocketConfig.getPort()));// 配置信道为非阻塞模式serverSocketChannel.configureBlocking(false);// 创建一个选择器selector Selector.open();// 将选择器注册到各个信道serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);// 初始化事件处理器protocol new EchoSelectorProtocol(nioSocketConfig.getBufferSize());} catch (IOException e) {log.error(粒径设备监听10091端口时发生异常,e);}// 不断轮询select方法获取准备好的信道所关联的Key集while (true) {try {if (selector null || protocol null) {break;}Thread.sleep(100);// 一直等待,直至有信道准备好了I/O操作if (selector.select(nioSocketConfig.getTimeout()) 0) {// 在等待信道准备的同时也可以异步地执行其他任务continue;}// 获取准备好的信道所关联的Key集合的iterator实例IteratorSelectionKey iterator selector.selectedKeys().iterator();// 循环取得集合中的每个键值while (iterator.hasNext()) {SelectionKey selectionKey iterator.next();// 如果服务端信道感兴趣的I/O操作为acceptif (selectionKey.isValid() selectionKey.isAcceptable()) {protocol.handleAccept(selectionKey);}// 如果客户端信道感兴趣的I/O操作为readif (selectionKey.isValid() selectionKey.isReadable()) {protocol.handleRead(selectionKey);}// 如果该键值有效并且其对应的客户端信道感兴趣的I/O操作为writeif (selectionKey.isValid() selectionKey.isWritable()) {protocol.handleWrite(selectionKey);}// 这里需要手动从键集中移除当前的keyiterator.remove();}} catch (Exception e) {log.error(监听端口轮询selector时发生异常,e);}}} }协议接口 import java.io.IOException; import java.nio.channels.SelectionKey;/*** 该接口定义了通用TCPSelectorServer类与特定协议之间的接口* 它把与具体协议相关的处理各种I/O的操作分离了出来* 以使不同协议都能方便地使用这个基本的服务模式。* author qf* since 2024/10/08 20:30*/ public interface Protocol {//accept I/O形式void handleAccept(SelectionKey selectionKey) throws IOException;//read I/O形式void handleRead(SelectionKey selectionKey) throws IOException;//write I/O形式void handleWrite(SelectionKey selectionKey) throws IOException; }实现类 import lombok.extern.slf4j.Slf4j;import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.nio.charset.StandardCharsets;/*** author qf* since 2024/10/08 20:30*/ Slf4j public class EchoSelectorProtocol implements Protocol {private int bufSize; // 缓冲区的长度public EchoSelectorProtocol(int bufSize) {this.bufSize bufSize;}// 服务端信道已经准备好了接收新的客户端连接public void handleAccept(SelectionKey selectionKey) {try {SocketChannel socketChannel ((ServerSocketChannel) selectionKey.channel()).accept();socketChannel.configureBlocking(false);// 将选择器注册到连接到的客户端信道并指定该信道key值的属性为OP_READ同时为该信道指定关联的附件socketChannel.register(selectionKey.selector(), SelectionKey.OP_READ, ByteBuffer.allocate(bufSize));} catch (IOException e) {log.error(accept异常,e);selectionKey.cancel();}}// 客户端信道已经准备好了从信道中读取数据到缓冲区public void handleRead(SelectionKey selectionKey) {try {SocketChannel socketChannel (SocketChannel) selectionKey.channel();if (!(selectionKey.attachment() instanceof ByteBuffer)) {return;}// 获取该信道所关联的附件这里为缓冲区ByteBuffer byteBuffer (ByteBuffer) selectionKey.attachment();long bytesRead socketChannel.read(byteBuffer);// 如果read()方法返回-1说明客户端关闭了连接那么客户端已经接收到了与自己发送字节数相等的数据可以安全地关闭if (bytesRead -1) {socketChannel.close();} else if (bytesRead 0) {// 将channel改为读取状态byteBuffer.flip();String dateStr new String(byteBuffer.array());if (true) {// 注册写事件selectionKey.interestOps(SelectionKey.OP_WRITE);selectionKey.attach(test); // 将数据附加到SelectionKey上}byteBuffer.clear();// 如果缓冲区总读入了数据则将该信道感兴趣的操作设置为为可读可写selectionKey.interestOps(SelectionKey.OP_READ | SelectionKey.OP_WRITE);}} catch (IOException e) {log.error(read异常, e);selectionKey.cancel();} catch (Exception e) {log.error(read异常, e);}}// 客户端信道已经准备好了将数据从缓冲区写入信道public void handleWrite(SelectionKey selectionKey) throws IOException {SocketChannel socketChannel (SocketChannel) selectionKey.channel();if (selectionKey.attachment() instanceof String) {String data (String) selectionKey.attachment(); // 获取附加的数据ByteBuffer buffer ByteBuffer.wrap(data.getBytes(StandardCharsets.UTF_8));socketChannel.write(buffer);}// 写完后取消写事件重新注册读事件selectionKey.interestOps(SelectionKey.OP_READ);} }客户端 import lombok.extern.slf4j.Slf4j;import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.nio.charset.StandardCharsets;/** * 模拟客户端* author qf* date 2024/7/8 19:25 */ Slf4j public class NIOClient {public static void main(String[] args) throws Exception{//得到一个网络通道SocketChannel socketChannel SocketChannel.open();//设置非阻塞socketChannel.configureBlocking(false);//提供服务器端的ip 和 端口InetSocketAddress inetSocketAddress new InetSocketAddress(127.0.0.1, 9991);//连接服务器if (!socketChannel.connect(inetSocketAddress)) {while (!socketChannel.finishConnect()) {//!没有 完成连接finishConnect方法log.info(因为连接需要时间客户端不会阻塞可以做其它工作..);}}//...如果连接成功就发送数据String str hello;ByteBuffer buffer ByteBuffer.wrap(str.getBytes());//发送数据将 buffer 数据写入 channelsocketChannel.write(buffer);// 接收服务器发送的数据int count 0;while (true) {ByteBuffer readBuffer ByteBuffer.allocate(1024 * 1024);count socketChannel.read(readBuffer);if(count ! 0){System.out.println(count);String data StandardCharsets.UTF_8.decode(readBuffer).toString();System.out.println(data);String x new String(readBuffer.array());System.out.println(x);count 0;}readBuffer.clear();}} } 相关文章 SpringBoot项目监听端口接受数据(Netty版)
http://www.w-s-a.com/news/600769/

相关文章:

  • python做网站多少钱wordpress 2.8
  • 深圳网站平台网站开发工作程序怎么写
  • 自己可以接单做网站吗wordpress 添加自定义按钮
  • 网站首页权重宣传页制作
  • 智能网站建设软件有哪些方面网页的建设
  • 石铜路网站建设生鲜电商网站开发
  • 怎么提高网站加载速度慢网站的轮播怎么做的
  • 网络网站推广优化建筑工程教育网官方网站
  • 旅行社网站策划做网站编辑好还是美工好
  • 珠海做网站找哪家好在线磁力搜索神器
  • 做网站优化有必要wordpress导航栏字体
  • 中山网站建设半江红沈阳免费网站建站模板
  • 工信部网站备案管理系统网站备案负责人 更换
  • 我要做个网站该怎么做怎么做电商平台网站
  • wordpress教程 网站标题莱芜大众网
  • 网站建设业务终止合作范本主机公园wordpress
  • 口碑好企业网站建设网站建设与什么专业有关
  • 助贷获客系统快速优化排名公司推荐
  • 重庆做网站优化推广的公司企业网站如何进行定位
  • 高密市赏旋网站设计有限公司山东广饶县建设局网站
  • 成都哪里有网站开发公司网业分离是什么
  • 购物导购网站开发女孩学建筑学好找工作吗
  • 做网站沈阳掌握夏邑进入公众号
  • 怎么做自动提卡网站谷歌推广怎么做
  • 大同网站建设熊掌号wordpress 首页单页
  • 青岛网站美工成都优秀网站建设
  • 聊城大型门户网站建设多版本wordpress
  • 建网站的公司 快云wordpress的搜索
  • 贷款网站模版东莞网站建设哪家专业
  • 做做网站已更新878网站正在建设中