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

网站自助建站方城网站制作

网站自助建站,方城网站制作,龙岩网络施工公司,做化妆品的一些网站1.阻塞模式 一个线程来处理多个连接显得力不从心 accept等待连接 是一个阻塞方法 read读取SocketChannel中的数据 是一个阻塞方法 /*** 服务端* param args* throws IOException*/public static void main(String[] args) throws IOException {//建立一个缓冲区ByteBuffer b…

1.阻塞模式

一个线程来处理多个连接显得力不从心

accept等待连接 是一个阻塞方法

read读取SocketChannel中的数据 是一个阻塞方法

 /*** 服务端* @param args* @throws IOException*/public static void main(String[] args) throws IOException {//建立一个缓冲区ByteBuffer byteBuffer = ByteBuffer.allocateDirect(16);//创建一个服务器ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();//给服务器绑定一个端口8000,让客户端来连接serverSocketChannel.bind(new InetSocketAddress(8000));//存储多个客户端的连接通道List<SocketChannel> channels = new ArrayList<>();while(true) { //保证可以多个客户端连接//建立与客户端的连接//SocketChannel 与客户端之间通信的数据通道log.info("等待客户端连接connecting");//accept方法是一个阻塞方法,会让线程暂停,客户端连接建立以后才会继续执行SocketChannel socketChannel = serverSocketChannel.accept();log.info("已连接connected...{}", socketChannel);channels.add(socketChannel);for (SocketChannel sc: channels ) {//接受客户端发送的数据log.info("等待客户端向SocketChannel中传输数据...{}", sc);//read方法是一个阻塞方法,会让线程暂停sc.read(byteBuffer);byteBuffer.flip();//读模式String byteBufferContent = StandardCharsets.UTF_8.decode(byteBuffer).toString();log.info("byteBufferContent={}", byteBufferContent);byteBuffer.clear();//写模式,从0开始log.info("读完毕..{}", sc);}}}
/*** 客户端* @param args* @throws IOException*/public static void main(String[] args) throws IOException {SocketChannel socketChannel = SocketChannel.open();//连接服务端,地址localhost:8000socketChannel.connect(new InetSocketAddress("localhost", 8000));//将hello字符串->byte[]->ByteBuffer->socketChannelsocketChannel.write(StandardCharsets.UTF_8.encode("hello"));System.out.println("waiting...");}

2.非阻塞模式

/*** 服务端* @param args* @throws IOException*/public static void main(String[] args) throws IOException {//建立一个缓冲区ByteBuffer byteBuffer = ByteBuffer.allocateDirect(16);//创建一个服务器ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();//****ServerSocketChannel配置为非阻塞-默认是阻塞true,可以让accept方法变成非阻塞serverSocketChannel.configureBlocking(false);//给服务器绑定一个端口8000,让客户端来连接serverSocketChannel.bind(new InetSocketAddress(8000));//存储多个客户端的连接通道List<SocketChannel> channels = new ArrayList<>();while(true) { //保证可以多个客户端连接//建立与客户端的连接//SocketChannel 与客户端之间通信的数据通道//**非阻塞模式下,如果没有客户端连接accept方法返回null值,线程会继续执行SocketChannel socketChannel = serverSocketChannel.accept();if(null != socketChannel) {log.info("已连接connected...{}", socketChannel);channels.add(socketChannel);}for (SocketChannel sc: channels) {//****SocketChannel配置为非阻塞-默认是阻塞true,可以让read方法变成非阻塞sc.configureBlocking(false);//接受客户端发送的数据//**非阻塞模式下,线程会继续执行,如果没有读取到数据会返回0int read = sc.read(byteBuffer);if(read > 0) {byteBuffer.flip();//读模式String byteBufferContent = StandardCharsets.UTF_8.decode(byteBuffer).toString();log.info("byteBufferContent={}", byteBufferContent);byteBuffer.clear();//写模式,从0开始log.info("读完毕..{}", sc);}}}}

 问题:非阻塞模式,会让线程一直在跑,太忙了,不能这么用。参考后续的Selector用法。

http://www.yayakq.cn/news/241267/

相关文章:

  • 网站开发需要多少钱销售做静态网站软件
  • 广州网站建设规划微博营销软件
  • 网站建设的价值是什么淄博住房和城乡建设厅网站
  • 凡客诚品的配送方式seo广告投放是什么意思
  • 京东的网站建设介绍优设网app
  • 柳州城市的城乡建设管理局网站公司logo形象墙
  • 扬州北京网站建设天津网站优化实战
  • 网站代码制作飞机多少钱一架
  • 点击图片是网站怎么做的微信网站 详解
  • 深圳做手机网站佛山外贸网站建设资讯
  • 做食品企业网站的费用学校门户网站建设费用
  • 海口模板建站定制长尾关键词挖掘词
  • cn免费域名注册网站网页游戏维京传奇
  • 做网站要用什么编程语言WordPress403禁止访问
  • 无锡网站建设详细内容网站设计排行
  • wap建站模板柳州建设网官方网站
  • 台州永建建设有限公司网站网站更换服务器 seo
  • 北斗手表官方网站常德做网站建设的公司
  • 动态视频素材网站页面模板在哪
  • 网站开发是做什么?社群营销的具体方法
  • 进口网站建设免费logo设计生成器免费试用
  • 建设局查询网站南京专业网站制作
  • 东莞外贸建站及推广郑州做网站zzmshl
  • 北京建站公司推荐首推万维科技企业网站建设合同方案
  • 网站做flash好不好微官网 入口
  • 网站论坛怎么做网站开发有很多种吗
  • 营销网站一般包括哪些内容网页设计类官网
  • 欧美做受网站视频播放网站内容填写
  • 做网站开发需要学哪些东西学院网站建设目的与意义
  • 哪个免费的网站建设好app设计网站模板免费下载