套接字输入流——InputStream

输入缓冲装置里面必须要包含读取字符的通道,否则就谈不上缓冲了,这个通道就是InputStream,它属于jdk中java.io包的类,有了它我们就可以从源头读取字符,它的来源可以有多种多样,这里主要探讨的是从socket连接中读取字符。

如上图,InputStream充当从操作系统底层读取socket字节的通道,当客户端与服务器端建立起连接后就可以看成存在一条通道供双方传递信息,客户端写入的字符串通过通道传递到服务器端,应用层则通过InputStream读取字节流。应用层最小单位为8位(字节),为方便后续转码处理我们希望获取到原生的字节流,以下代码已很大程度简化且不保证逻辑正确,只为说明客户端传输字节到服务器端的过程。服务器端建立好监听等待客户端发起连接,客户端与服务器端连接起来后通过OutputStream向服务器端写入字节数组,服务器端通过InputStream将客户端传过来的字节数组读取到buffer中,接着就可以往下对buffer进行其他处理,例如解码操作。套接字输入缓冲装置就是通过InputStream将字节读取到缓冲装置,并且提供对http协议的请求行、请求头部等解析方法。其中http协议请求行及头部规定使用ASCII编码,字节刚好与之对应。

①   服务器端:

ServerSocket server = new ServerSocket(8080);

Socket socket = server.accept();

InputStream in = socket.getInputStream();

byte[] buffer = new byte[5];

int i = in.read(buffer);

socket.close();

 

②   客户端:

Socket client= new Socket("127.0.0.1", 8080);

OutputStream out = client.getOutputStream();

byte[] bytes={1,1,1,1,1};

out.write(bytes);

client.close();

点击订购作者《Tomcat内核设计剖析》

时间: 2024-10-23 10:59:10

套接字输入流——InputStream的相关文章

【网络编程1】Java套接字Socket

这篇博客是本人学习<Java网络程序设计>书中第4章套接字的学习总结.初学者网友学习这篇Java套接字文章,如果难于理解文章前面理论部分,可以先运行后面的程序,边看运行后面的程序边理解前面的原理,这对初学者是最好的方法.所有源代码都在文章后面我的github链接代码中. --惠州学院 13网络工程 吴成兵 20160607 目录 1 目录 1 一 流套接字概述 二 服务器套接字ServerSocket 21 ServerSocket的工程过程 22 ServerSocket构造方法 23 Se

套接字输入缓冲装置——InternalInputBuffer

互联网的世界很复杂,信息从一端传向另一端过程也相当复杂,中间可能通过若干个硬件,为了提高发送和接收效率,在发送端及接收端都将引入缓冲区,所以两端的套接字都拥有各自的缓冲区,当然这种缓冲区的引入也带来了不确定的延时,在发送端一般先将消息写入缓冲区,直到缓冲区填满才发送,而接收端则一次只读取最多不超过缓冲区大小的消息. Tomcat在处理客户端的请求时需要读取客户端的请求数据,它同样需要一个缓冲区用于接收字节流,即套接字输入缓冲装置,它主要的责任是提供一种缓冲模式从socket中读取字节流,提供填充

Java套接字编程(上)(2)

Socket类 当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数.两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字.对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象

Java套接字编程(上)(3)

编程 ServerSocket类 由于SSClient使用了流套接字,所以服务程序也要使用流套接字.这就要创建一个ServerSocket对象,ServerSocket有几个构造函数,最简单的是ServerSocket(int port),当使用ServerSocket(int port)创建一个ServerSocket对象,port参数传递端口号,这个端口就是服务器监听连接请求的端口,如果在这时出现错误将抛出IOException异常对象,否则将创建ServerSocket对象并开始准备接收连

什么是套接字

"套接字"或者"插座"(Socket)也是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条虚拟的"线缆".线缆的每一端都插入一个"套接字"或者"插座"里.当然,机器之间的物理性硬件以及电缆连接都是完全未知的.抽象的基本宗旨是让我们尽可能不必知道那些细节. 在Java中,我们创建一个套接字

通过java套接字传递对象

使用JavaTM远程方法调用(RMI),可以很方便地开发分布式的基于对象的应用程序.RMI的简单性,是由网络通信的费用作为代价的.底层的套接字可以用来开发客户/服务器系统,但是由于大多数Java I/O类和对象不太容易匹配,如何通过套接字传递完成的对象呢?对象序列化是一个允许您以比特流方式读/写完成对象的机制. 将底层的套接字和对象序列化结合在一起,您将得到一个强大的.高效的.可替代RMI的机制,通过套接字来传递对象还能克服使用RMI的高费用的问题. 对象序列化概述 对象序列化机制对于需要将对象

JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步?

问题描述 JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步? 服务器Server客户端CLientServer静态常量num创建服务器,ServerSocket的端口号为8000,连接套接字.每创建一个客户端,客户端就创建一个Socket,端口号为8000,与服务器进行连接,与此同时,客户端新建ServerSocket,端口号为3000+Server.num,连接套接字.服务器与客户端连接后,服务器新建子线程Handler.子线程Handler,新建Ser

实现非阻塞套接字的一种简单方法 使用 JSSE 和 NIO 实现非阻塞通信的一种快速方法

简介: 尽管 SSL 阻塞操作――当读写数据的时候套接字的访问被阻塞――与对应的非阻塞方式相比提供了更好的 I/O 错误通知,但是非阻塞操作允许调用的线程继续运行.本文中,作者同时就客户端和服务器端描述了如何使用Java Secure Socket Extensions (JSSE) 和 Java NIO (新 I/O)库创建非阻塞的安全连接,并且介绍了创建非阻塞套接字的传统方法,以及使用JSSE 和 NIO 的一种可选的(必需的)方法. 阻塞,还是非阻塞?这就是问题所在.无论在程序员的头脑中多

Java网络编程菜鸟进阶:TCP和套接字入门

我竟然到现在才发现<Fundamental Networking in Java>这本神作,真有点无地自容的感觉.最近几年做的都是所谓的企业级开发,免不了和网络打交道,但在实际工作中,往往会采用框架将底层细节和上层应用隔离开,感觉就像是在一个 Word 模板表单里面填写内容,做出来也没什么成就感.虽然没有不使用框架的理由,但我还真是有点怀念当初直接用套接字做网络编程的日子,既能掌控更多东西,还可以学到更多知识,为研究框架的实现原理打基础.闲话完毕,转入今天的正题:IP(Internet Pro