从SocketChannel读取数据

【死磕NIO】— 探索 SocketChannel 的核心原理 Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 大家好,我是大明哥,一个专注于【死磕 Java】系列创作的程序员。 【死磕 Java 】系列为作者「chenssy」 倾情打造的 Java 系列文章,深入分析 Java 相关技术核心原理及源码。 死磕 Java :https://www.cmsblogs.com/group/ 阅读详情
SocketChannel的读取方式也比较特殊,请看代码。可以直接在ByteBuffer里面操作。也可以转化为byte[]再转为中文String

  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 SocketChannelRead {
  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.     byte[] buff = new byte[1024];
  23.     try {
  24.       buf.clear();
  25.       SocketChannel socketChannel = createSocketChannel("163.net", 25);
  26.       while (!socketChannel.finishConnect()) {
  27.         System.out.println("等待非阻塞连接建立....");
  28.         try {
  29.           Thread.sleep(10);
  30.         } catch (InterruptedException e) {
  31.           e.printStackTrace();
  32.         }
  33.       }
  34.       int numBytesRead;
  35.       while ((numBytesRead = socketChannel.read(buf)) != -1) {
  36.         if (numBytesRead == 0) {
  37.           // 如果没有数据,则稍微等待一下
  38.           try {
  39.             Thread.sleep(1);
  40.           } catch (InterruptedException e) {
  41.             e.printStackTrace();
  42.           }
  43.           continue;
  44.         }
  45.         // 转到最开始
  46.         buf.flip();
  47.         while (buf.remaining() > 0) {
  48.           System.out.print((char) buf.get());
  49.         }
  50.         // 也可以转化为字符串,不过需要借助第三个变量了。
  51.         // buf.get(buff, 0, numBytesRead);
  52.         // System.out.println(new String(buff, 0, numBytesRead, "UTF-8"));
  53.         // 复位,清空
  54.         buf.clear();
  55.       }
  56.     } catch (IOException e) {
  57.       e.printStackTrace();
  58.     }
  59.   }
  60. }

运行效果
等待非阻塞连接建立....
等待非阻塞连接建立....
220 Coremail SMTP(Anti Spam) System (163net[040302])


非线性功率放大器对QAM传输BER性能的影响及补偿 1、线性功率放大器对传输性能的影响 为表述非线性功率放大器对传输性能的影响,以Saleh模型进行观察。具体来说,在QAM调制器之后添加一个非线性模块,使调制后的波形经历AM / AM和AM / PM转换。 在Saleh模型中,转换用四个参数表示,即AM / AM转换为????a和????a,AM / PM转换为????p和????p。 在Saleh模型中,AM / AM和AM / PM方程以输入电压u的大小表示为: 式中,FAM / AM是AM / AM转换的输出电压与输入电压的关系,而FAM 阅读详情

相关推荐

科研绘图(二):R 语言实现小鼠脑图谱 3D 渲染,附完整代码与数据获取指南

在生物医学科研中,脑区的 3D 可视化是呈现实验结果、解析脑结构功能的重要手段。R 语言凭借rgl和Rvcg等工具包,可高效实现小鼠全脑及特定脑区(如 CA1 区)的立体渲染,且代码可复用性强。本文将从环境搭建、数据准备、代码实现到结果导出,手把手带你完成小鼠脑图谱 3D 绘图,小白也能快速上手!

good_rrrrr的博客 2024

浅析NIO Channel

JavaNIO中,一个socket连接使用一个Channel(通道)来表示。然而,从更广泛的层面来说,一个通道封装了一个底层的文件描述符,例如硬件设备、文件、网络连接等。所以,与文件描述符相对应,JavaNIO的通道分为很多类型。但是Java的通道更加的细化,例如,对应到不同的网络传输协议类型,在Java中都有不同的NIOChannel(通道)相对应。......

ntzzzsj的博客 902

从零构建基于ZYNQ与AD9361的SDR信号源:FPGA逻辑与射频前端的协同设计

本文详细介绍了从零开始构建基于ZYNQ与AD9361的SDR信号源的完整流程。通过解析FPGA逻辑与射频前端的协同设计,重点阐述了如何利用FPGA生成基带信号,并通过ARM处理器配置AD9361,最终实现一个可编程的2.4GHz载波信号发生器。内容涵盖硬件选型、Vivado环境搭建、AXI总线通信、LVDS接口设计及软件驱动开发,为SDR开发者提供了实用的实战指南。

weixin_29200485的博客 215

【转载】Java NIO系列教程(八) SocketChannel

如果 SocketChannel 在非阻塞模式下,此时调用 connect(),该方法可能在连接建立之前就返回了。可以设置 SocketChannel 为非阻塞模式(non-blocking mode).设置之后,就可以在异步模式下调用 connect(), read() 和 write() 了。写数据到 SocketChannel 用的是 SocketChannel.write() 方法,该方法以一个 Buffer 作为参数。非阻塞模式下,write()方法在尚未写出任何内容时可能就返回了。

nukix 599

Mac电脑本地安装Stable Diffusion小白教程避开所有坑教程

如果出现黄字部分警告,如WARNING: The scripts pip, pip3 and pip3.9 are installed inz‘/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/bin’ which is not on PATH)需要将其添加到path。下载pip,输入:curl https://bootstrap.pypa.io/pip/get-pip.py -o get-pip.py。

jackerjin123的博客 1799

基于STM32的3D打印机控制

通过本项目,我们成功搭建了一个基础的3D打印机控制系统,能够控制步进电机和加热元件。这为使用STM32开发功能丰富的3D打印机提供了基础,您可以在此基础上继续扩展功能,如增加LCD显示、SD卡存储、联网控制等功能。在这个项目中,我们将使用STM32微控制器开发一个基础的3D打印机控制系统。通过控制步进电机、加热元件和温度传感器,我们将实现一个简单的FDM(熔融沉积制造)3D打印机控制。- 检查PWM信号的生成功能,确认加热元件的控制逻辑是否正常。- 增加适当的滤波和校准算法,以提高温度读取的准确性。

2401_88938661的博客 1504

谨慎使用SocketChannel的read方法

下面的代码是一个实例化SocketChannel的过程: SocketChannel channel = SocketChannel.open(); //要设置连接超时 channel.socket().connect(addr,connectionTimeOut_ms); //设置读超时 channel.socket().setSoTimeout(timeou...

wei 1107

从零构建XVC协议栈:FPGA+W5300的跨界调试架构实战

本文详细介绍了如何从零构建XVC协议栈,通过FPGA与W5300以太网控制器的创新组合实现跨界调试架构。重点解析了JTAG时序逆向、TCP/IP协议栈集成与XVC协议实现,提供了硬件设计优化和性能加速技术,为嵌入式开发者和FPGA工程师提供实用的远程调试解决方案。

raspberrypi5的博客 251

NIO之SocketChannel,SocketChannel ,DatagramChannel解读

(1)SocketChannel 就是 NIO 对于非阻塞 socket 操作的支持的组件,其在 socket 上 封装了一层,主要是支持了非阻塞的读写。同时改进了传统的单向流 API,,Channel同时支持读写。(2)socket 通道类主要分为 DatagramChannel、SocketChannel 和 ServerSocketChannel,它们在被实例化时都会创建一个对等 socket 对象。

一个菜鸡的博客 2701

QCM6490平台DDR测试:从QDUTT配置到眼图分析的实战指南

本文详细介绍了QCM6490平台DDR测试的全流程,从QDUTT工具安装配置到眼图分析,提供了实战操作指南和常见问题解决方案。通过具体案例分享,帮助工程师掌握DDR测试技巧,确保内存稳定性,特别适用于物联网和边缘计算设备的开发调试。

weixin_33910191的博客 459

用电脑通过网口控制keysight示波器

Keysight HD304MSO示波器提供1GHz带宽、14位高精度ADC及10.1英寸触控屏,支持50μV低噪声信号捕获和1.3M波形/秒刷新率。配备4通道探头、逻辑分析仪接口及100Mpts存储深度,含故障诊断、FFT等高级功能。通过网线连接电脑安装TightVNC软件(示波器IP为169.254.163.24)可实现远程控制,相比U盘传输更高效。(149字)

johnboat的专栏 1136

Netty源码分析第5章(ByteBuf)---->第10节: SocketChannel读取数据过程

Netty源码分析第5章(ByteBuf)---->第10节: SocketChannel读取数据过程 Netty源码分析第五章: ByteBuf 第十节:SocketChannel读取数据过程 我们第三章分析过客户端接入的流程, 这一小节带大家剖析客户端发送数据, Server读取数据的流程: 首先温馨提示, 这一小...

weixin_30321449的博客 291

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java NIO系列教程(八) SocketChannel

Java NIO系列教程(八) SocketChannel 原文链接     作者:Jakob Jenkov     译者:郑玉婷      校对:丁一 Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达Serve

DavyJonesWang的专栏 549

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

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Java NIO 简例】SocketChannel

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

一个被IT搞的 216

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

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

Java nio 读取数据代码_Java的; NIO - 从SocketChannel读取大量数据

我正在编写一个非常简单的网络库,以便将来可以用于其他项目。现在,我无法处理阅读操作。我有一个负责处理来自SocketChannels的事件的类,它还包含输入和输出缓冲区。要初始化缓冲区,您需要定义它的大小。所以默认情况下,所有缓冲区的大小都是1024字节。我遇到的问题是,如果我读取的数据包大于1024字节,我会得到一个异常。这可以通过默认分配更大的缓冲区来解决(例如2048字节,而不是1024),...

weixin_34180753的博客 414

可使用Java中Nio包的socketChannel从客户端套接字获取的最大数据大小

使用SocketChannel sc =(SocketChannel)key.channel();,我们可以从端口获取数据到缓冲区. 为了从端口连续接收数据而不会丢失数据,代码应如何? 这是我的代码 import java.io.*; import java.net.*; import java.nio.*; import java.nio.channels.*; import ...

weixin_44109689的博客 958

socketchannel java_Java NIO SocketChannel套接字通道

在Java NIO体系中,SocketChannel是用于TCP网络连接的套接字接口,相当于Java网络编程中的Socket套接字接口。创建SocketChannel主要有两种方式,如下:打开一个SocketChannel并连接网络上的一台服务器。当ServerSocketChannel接收到一个连接请求时,会创建一个SocketChannel。建立一个SocketChannel连接打开一个Soc...

weixin_35728089的博客 215

SocketChannel 例子

这几天在看mina mina 基于socketChannel 和 DatagramChannel 建立的无阻塞链接。 所以就看了看socket channel 的使用方式,做一份备忘吧。 socketChannel 的使用方式 server端 package com.jimmy.nio; import java.io.IOException; import jav...

youzifei 324

9.Java NIO系列教程之SocketChannel

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

shihuacai的专栏 1030

Java NIO系列教程(二) Channel

Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。 正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示: Channel的实现 这些是Java NIO中最重要的通道的实现:

feifei20081014的专栏 493

Java NIO SocketChannel读

以读取百度的首页内容为例: import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; public class SocketTest { public static void main(...

Zhang Phil 999

java nio socketChannel read

当socketChannel为阻塞方式时(默认就是阻塞方式)read函数,不会返回0,阻塞方式的socketChannel,若没有数据可读,或者缓冲区满了,就会阻塞,直到满足读的条件,所 以一般阻塞方式的read是比较简单的,不过阻塞方式的socketChannel的问题也是显而易见的。这里我结合基于NIO 写ftp服务器调试过程中碰到的问题,总结一下非阻塞场景下的 read碰到的问题。注意:

pingnanlee的专栏 1万+
上一篇: 充分利用资源,非阻塞的Socket链接
下一篇: 向SocketChannel写入数据并读取返回数据
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值