向SocketChannel写入数据并读取返回数据

Java NIO系列教程(8)-SocketChannel的最佳实践 然后,调用SocketChannel.read()。如果返回的是-1,表示已经读到了流的末尾(连接关闭了)。注意SocketChannel.write()方法的调用是在一个while循环中的。如果SocketChannel在非阻塞模式下,此时调用connect(),该方法可能在连接建立之前就返回了。设置后,就可以在异步模式下调用connect(), read() 和write()。要从SocketChannel中读取数据,调用一个read()的方法之一。写数据到SocketChannel用的是。 阅读详情
  1. package net.java2000.nio;
  2. import java.io.IOException;
  3. import java.net.InetSocketAddress;
  4. import java.nio.ByteBuffer;
  5. import java.nio.channels.SocketChannel;
  6. /**
  7.  * 向SocketChannel写入数据并读取返回数据。
  8.  * 
  9.  * @author 赵学庆,Java世纪网(java2000.net)
  10.  * 
  11.  */
  12. public class SocketChannelWrite {
  13.   public static SocketChannel createSocketChannel(String hostName, int port)
  14.       throws IOException {
  15.     SocketChannel sChannel = SocketChannel.open();
  16.     sChannel.configureBlocking(false);
  17.     sChannel.connect(new InetSocketAddress(hostName, port));
  18.     return sChannel;
  19.   }
  20.   public static void main(String[] args) {
  21.     ByteBuffer buf = ByteBuffer.allocateDirect(1024);
  22.     try {
  23.       buf.clear();
  24.       SocketChannel socketChannel = createSocketChannel("www.163.com", 80);
  25.       while (!socketChannel.finishConnect()) {
  26.         System.out.println("等待非阻塞连接建立....");
  27.         try {
  28.           Thread.sleep(10);
  29.         } catch (InterruptedException e) {
  30.           e.printStackTrace();
  31.         }
  32.       }
  33.       buf.put("get / /n/n".getBytes());
  34.       buf.flip();
  35.       socketChannel.write(buf);
  36.       buf.clear();
  37.       int numBytesRead;
  38.       while ((numBytesRead = socketChannel.read(buf)) != -1) {
  39.         if (numBytesRead == 0) {
  40.           // 如果没有数据,则稍微等待一下
  41.           try {
  42.             Thread.sleep(1);
  43.           } catch (InterruptedException e) {
  44.             e.printStackTrace();
  45.           }
  46.           continue;
  47.         }
  48.         // 转到最开始
  49.         buf.flip();
  50.         while (buf.remaining() > 0) {
  51.           System.out.print((char) buf.get());
  52.         }
  53.         // 也可以转化为字符串,不过需要借助第三个变量了。
  54.         // buf.get(buff, 0, numBytesRead);
  55.         // System.out.println(new String(buff, 0, numBytesRead, "UTF-8"));
  56.         // 复位,清空
  57.         buf.clear();
  58.       }
  59.     } catch (IOException e) {
  60.       e.printStackTrace();
  61.     }
  62.   }
  63. }

java SocketChannel通信实例 这是一个非阻塞通信学习的基础模板,让你轻松掌握非阻塞通信。里面还包含了可运行的jar包,可以抢先体验效果哦~_~ 立即下载

相关推荐

在统信UOS Server 20上踩坑记:手把手教你搞定openGauss 5.0.0企业版安装(附常见报错解决方案)

本文详细记录了在统信UOS Server 20上安装openGauss 5.0企业版的实战经验,包括环境准备、依赖库问题、目录权限、内存参数调优等常见问题的解决方案。通过伪装系统标识、建立软链接、调整内存参数等方法,成功克服国产操作系统与企业级数据库的兼容性挑战,为开发者提供了一份深度排雷指南。

weixin_28698059的博客 265

netty4.1.70-学习笔记之HELLO WORLD

server package sample; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.*; import io.netty.channel.socket.SocketChannel; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.nio.NioEventLoopGroup;

随笔 629

【数字逻辑电路课程设计】多功能数码管时钟VHDL+quartus II-EP1C12F324C8+源码+付费资源

我希望需要我这篇文章的是正常学习数字逻辑课程且正在设计数码管时钟的同学。我个人不推荐直接获取源代码,因此我另有一份付费资源是完整源代码;我推荐各位去研究我代码的逻辑尝试自己书写属于自己的代码,因此我保留了注释但隐去了变量。由于时间有限,我的设计不够完美,仍有很多缺陷,我将我的展望写在后面,各位可以尝试实现。我不为难同学,作为同学我理解各位设计的辛苦,因此如果有需要,私信我提供隐去敏感信息的学生证照片可直接获取源代码。

WannaFlysyx的博客 1535

使用 SocketChannel 读写

在本章中,您将学习: 从 SocketChannel 读取 写入 SocketChannel 从 SocketChannel 读取 import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; /* j ava 2s . c o m*/ public class Main { public static void main(String[] argv) throws Exception { ByteBu..

allway2的博客 890

ESP32实战指南:SPI驱动ADXL345三轴加速度传感器的精准数据采集与姿态解算

本文详细介绍了如何使用ESP32通过SPI接口驱动ADXL345三轴加速度传感器,实现精准数据采集与姿态解算。从硬件连接到SPI通信优化,再到数据处理和低功耗策略,提供了全面的实战指南。特别适合物联网开发者和硬件工程师参考,帮助快速掌握传感器数据采集技术。

vim8coder的博客 1042

CH455G数码管驱动与键盘扫描:I2C通信协议深度解析与实战代码

本文深度解析CH455G芯片的I2C通信协议,涵盖数码管驱动与键盘扫描功能的实战应用。通过详细讲解起始/停止信号、数据帧结构、应答机制及单片机代码实现,帮助开发者高效利用该芯片减少IO占用,提升嵌入式系统设计效率。

tea88的博客 1085

Java nio包SocketChannel详解

SocketChannel 是 Java NIO 中用于实现基于 TCP 协议的套接字通信的通道。在介绍SocketChannel之前先讲下Selector 。

境里婆娑 1215

STC单片机 普通 I/O 口中断功能介绍和使用

STC32单片机 普通 I/O 口中断功能介绍和使用

perseverance51博客 3048

Java NIO(五)-FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel[译]

Java NIO(五)-FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel 一、FileChannel Java NIO FileChannel是连接到文件的通道。使用FileChannel,可以从文件中读取数据,并将数据写入文件。 Java NIO FileChannel类是标准Java IO API读取文件的可替代...

m0_37113539的博客 1302

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

将电位器Rp调至中心位置,用双综示波器观察并绘制方波U0的波形,测量其幅值和频率;将电位器RP调至中心位置,用示波器观察并绘制锯齿波U0的波形,记录;示波器基线调零,Ui输入1000HZ、幅值为2V的正弦信号,观察并记录Ui与U0波形,读出图中波形跳变时的Ui临界值;用万用表电位器RP调至预测结果位置,用示波器观察并描绘三角波输出U0及方波输出uo’,测其幅值、频率及Rp值,记录之。示波器基线调零,U输入1000HZ、幅值为2V的正弦信号,观察UI与U0波形。理论算法公式:当Ui

Welcome To My6n Blog 3937

游戏大厂射击游戏无缝大世界游戏DS服务器架构设计方案详解

摘要: 本文深入解析游戏大厂无缝大世界射击游戏的分布式服务器(DS)架构设计方案。以《和平精英》《量子特攻》为例,阐述如何通过动态分区、兴趣管理、弹性扩缩等核心技术应对高并发、低延迟、无缝切换等挑战。架构分为世界协调层、分区计算层、物理判定层等模块,结合微服务化、快照同步和Kubernetes调度,实现玩家跨区无感知迁移与一致判定。重点优化动态负载均衡、状态同步算法及容灾备份,依托分布式数据库与多云部署保障高可用性,为同类游戏提供可扩展的技术范本。(149字) 关键词: 无缝大世界、分布式服务器、动态分区、

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 564

从SocketChannel读取数据

从SocketChannel读取数据

jgfyyfd的博客 3047

AI驱动的网络安全运维:智能化时代的安全保障

本项目旨在使用Python和AI技术构建一个智能化的网络安全运维系统,能够实时监测网络流量,检测潜在的安全威胁,并自动采取应对措施,从而提升网络安全管理的效率和准确性。具体内容包括:环境配置与依赖安装数据采集与预处理机器学习模型构建与训练实时威胁检测与响应实际应用案例通过本文的介绍,我们展示了如何使用Python和AI技术构建一个智能化的网络安全运维系统。

Echo_Wish 1291

SocketChannel 读取ByteBuf 的过程

SocketChannel 读取ByteBuf 的过程:   我们首先看NioEventLoop 的processSelectedKey 方法: private void processSelectedKey(SelectionKey k, AbstractNioChannel ch) {   //获取到channel 中的unsafe   final AbstractNio...

吴振照 1260

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SocketChannel类

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 一、简介 该类表示针对面向流的连接套接字的可选择通道。 类声明:public abstract class SocketChannel extends AbstractSelectableChannelimp...

孤云博客 2597

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Java NIO 简例】SocketChannel

. 原文:《Java NIO SocketChannel》 Java NIO 中的 SocketChannel 用于处理 TCP 网络连接。 开启 SocketChannel 示例:连接远程服务器 Java代码 SocketChannelchannel=SocketChannel.open(); channel.connect(newInet...

一个被IT搞的 216

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java SocketChannel 读取ByteBuffer字节的处理模型

在JAVA中的流分为字节流或字符流,一般来说采用字符流处理起来更加方便。字节流处理起来相对麻烦,SocketChannel中将数据读取到ByteBuffer中,如何取出完整的一行数据(使用CRLF分隔)? 例如: Socket收到的内容为: 1234567890CRLF 0123456789CRLF 注意:CRLF为回车换行符号 如果使用 SocketChannel.r...

anjiangang9974的博客 1029

java nio socketchannel_java nio之SocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:1SocketChannel s...

weixin_42355411的博客 134

socketchannel java_SocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:1SocketChannel s...

weixin_39669701的博客 164

NIO 学习(五) SocketChannel

SocketChannel介绍

z1340954953 494

Java的NIO之网络通信的SocketChannel

Java的NIO中的SocketChannel是一个连接到TCP网络套接字的通道(SocketChannel这个通道一般用于客户端,服务端一般使用ServerSocketChannel)。可以通过以下2种方式创建SocketChannel: 1. 打开一个SocketChannel并连接到互联网的某台服务器上。 2. 一个新的连接到达ServerSocketChannel时,server端会创建

惜暮 1102

java.nio.channels.SocketChannel

public abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel GatheringByteChannel ScatteringByteChannel java.lang.Object ? java.nio.channels.spi.AbstractInterru...

Marks' JavaEye 876
上一篇: 从SocketChannel读取数据
下一篇: 多个SocketChannel注册Selector统一管理
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值