从网页连接socket服务器和I/O

这篇具有很好参考价值的文章主要介绍了从网页连接socket服务器和I/O。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.i/o

InputStreamInputStreamReader是Java I/O类库中的两个关键类,用于处理字节流。它们的主要区别在于它们处理数据的方式。

InputStream:

  • InputStream是用于读取字节流的抽象类。它是所有字节输入流类的父类。
  • InputStream的子类可以从不同的数据源读取字节,例如文件、网络连接、内存等。
  • 它提供了基本的字节读取方法,如read(),用于读取单个字节,以及read(byte[] b),用于读取一组字节。
InputStream inputStream = new FileInputStream("example.txt");
int data = inputStream.read(); // 读取单个字节
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer); // 读取一组字节

FileInputStream 

FileInputStreamInputStream 类的一种具体实现,它专门用于从文件中读取字节。下面是 FileInputStreamInputStream 的主要区别:

  1. 特定用途:

    • InputStream 是一个抽象类,用于表示字节输入流的基本接口,但它本身不能直接实例化。它有多个具体的实现类,包括 FileInputStream。(所以InputStream inputStream = new FileInputStream("example.txt");是多态的体现)
    • FileInputStreamInputStream 的一个具体实现,它通过文件系统读取字节流。
  2. 用法:

    • InputStream 可以用于从各种来源读取字节,例如文件、网络连接、字节数组等。
    • FileInputStream 专门用于从文件中读取字节。你需要提供文件路径或文件对象作为构造函数的参数。
  3. 构造方法:

    • FileInputStream 的构造方法需要一个表示文件路径的字符串或者一个 File 对象。例如:new FileInputStream("example.txt")new FileInputStream(new File("example.txt"))
    • InputStream 本身不能直接实例化,因为它是一个抽象类。你需要使用其具体实现类之一来创建对象。
  4. 异常处理:

    • FileInputStream 的构造方法和读取方法都可能抛出 IOException,因此在使用时需要进行异常处理。
    • InputStream 的一些方法也可能抛出 IOException

 InputStreamReader:

  • InputStreamReaderReader类的子类,它是用于读取字符流的桥梁,将字节流转换为字符流。
  • 它接受一个InputStream作为参数,将字节流转换为字符流,并提供了字符读取方法,如read()read(char[] cbuf)
  • InputStreamReader处理字符的方式是根据指定的字符编码将字节转换为字符。
InputStream inputStream = new FileInputStream("example.txt");
Reader reader = new InputStreamReader(inputStream, "UTF-8");
int charData = reader.read(); // 读取单个字符
char[] charBuffer = new char[1024];
int charsRead = reader.read(charBuffer); // 读取一组字符

BufferedReader:

  • BufferedReaderReader类的装饰器,用于缓冲字符输入。它提供了缓冲功能,可以一次读取多个字符,以提高读取性能。
  • BufferedReader通常用于包装其他Reader,例如FileReaderInputStreamReader,以提供缓冲的字符读取。
InputStream inputStream = new FileInputStream("example.txt");
Reader reader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(reader);

OutputStreamWriter :

OutputStreamWriter是Java I/O类库中的一个类,用于将字符流转换为字节流。它是Writer类的子类,允许你按字符而不是字节写入数据到输出流中,并且可以指定字符编码。

主要特点:

  1. 字符到字节的转换: OutputStreamWriter将字符数据转换为字节数据,然后将字节写入底层的输出流。

  2. 字符编码: 你可以在创建OutputStreamWriter时指定字符编码。这是非常重要的,特别是在处理文本数据时,因为它影响了字符到字节的映射。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class OutputStreamWriterExample {
    public static void main(String[] args) {
        try {
            // 创建一个字节输出流
            FileOutputStream fileOutputStream = new FileOutputStream("output.txt");

            // 创建OutputStreamWriter并指定字符编码
            Writer writer = new OutputStreamWriter(fileOutputStream, "UTF-8");

            // 写入字符数据
            writer.write("Hello, OutputStreamWriter!");

            // 关闭流
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 2.从网页连接socket服务器和I/O

之前我们都是通过自己写的client类连接server的,现在我们通过浏览器来连接server。

连接时,在浏览器里输入http://localhost:8080。

当我们从浏览器访问自己写的服务器时,浏览器(也就是客户端)会向服务器发送请求,我们可以通过socket的输入流来接受并打印这些请求的内容:

BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
            String line;
            //如果读到的字符串不为空,就打印。为空,则跳出循环
            while(!((line=bufferedReader.readLine()).isEmpty())){
                System.out.println(line);
            }

line里的内容就是请求的内容:

GET / HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5

 

 然后我们还可以向客户端返回数据:

OutputStreamWriter writer=new OutputStreamWriter(socket1.getOutputStream()); 
writer.write("HTTP/1.1 200 Accepted\r\n");

            //在响应头写完后一定要再换行才能写我们的响应体(在浏览器上展示的部分)
            writer.write("\r\n");
            //响应的内容
            writer.write("lyjnb");
            writer.flush();
            socket1.close();

其中,

"HTTP/1.1 200 Accepted\r\n" 是 HTTP 协议中的响应头。
"HTTP/1.1" 表示使用的是 HTTP 1.1 版本。
"200" 是响应状态码,表示请求被成功处理。
"Accepted" 是状态码的描述,表示请求已被接受。
最后的 "\r\n" 是回车和换行符,表示行结束符,HTTP 协议要求在头部信息的每一行末尾使用这个组合。

最后我们得到的效果:

从网页连接socket服务器和I/O,java,开发语言文章来源地址https://www.toymoban.com/news/detail-781832.html

package socket3_browser_to_socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String args[]){
        try(ServerSocket socket=new ServerSocket(8080)){
            System.out.println("waiting for client...");
            Socket socket1=socket.accept();
            System.out.println("already connected, ip address:"+socket1.getInetAddress().getHostAddress());
            InputStream inputStream=socket1.getInputStream();
            System.out.println("data received:");

            //BufferedReader是Reader类的装饰器,用于缓冲字符输入。它提供了缓冲功能,可以一次读取多个字符,以提高读取性能。
            //InputStreamReader是Reader类的子类,它是用于读取字符流的桥梁,将字节流转换为字符流。
            //InputStream是用于读取字节流的抽象类。它是所有字节输入流类的父类。
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
            String line;
            //如果读到的字符串不为空,就打印。为空,则跳出循环
            while(!((line=bufferedReader.readLine()).isEmpty())){
                System.out.println(line);
            }
            OutputStreamWriter writer=new OutputStreamWriter(socket1.getOutputStream());

            //"HTTP/1.1 200 Accepted\r\n" 是 HTTP 协议中的响应头。
            //"HTTP/1.1" 表示使用的是 HTTP 1.1 版本。
            //"200" 是响应状态码,表示请求被成功处理。
            //"Accepted" 是状态码的描述,表示请求已被接受。
            //最后的 "\r\n" 是回车和换行符,表示行结束符,HTTP 协议要求在头部信息的每一行末尾使用这个组合。
            writer.write("HTTP/1.1 200 Accepted\r\n");

            //在响应头写完后一定要再换行才能写我们的响应体(在浏览器上展示的部分)
            writer.write("\r\n");
            //响应的内容
            writer.write("lyjnb");
            writer.flush();
            socket1.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

到了这里,关于从网页连接socket服务器和I/O的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机】有人 WH-LTE-7S1 4G cat1 模块连接服务器,教程,记录。GPRS模块连接服务器教程。socket编程。

    本文主要介绍了一个4G Cat1模块,该模块具有多种功能和特性。文章接下来展示了4G Cat1模块的封装、引脚名称和功能拓扑图。然后介绍了如何通过串口模块调试WH-LTE-7S1模块,包括线路连接和使用串口助手进行调试的方法。 接着, 文章介绍了如何在公网服务器上建立Python程序

    2024年02月08日
    浏览(46)
  • 【Linux后端服务器开发】socket套接字

    目录 一、socket 套接字概述 二、socket 函数接口 三、IP地址与端口号的网络格式 四、TCP协议的本地通信C语言示例 socket 是什么? socket 本质上是一个抽象的概念,它是一组用于 网络通信的 API , 提供了一种统一的接口 ,使得应用程序可以通过网络进行通信。在不同的操作系统

    2024年02月16日
    浏览(38)
  • 网络socket服务器开发几种并发模型详解

    目录 一、socket创建流程。 二、I/O多路复用 三、服务器开发常见的并发模型 1、模型一:单线程——无IO复用 1.1 模型分析 2、模型二:单线程accept + 多线程读写业务(无IO复用) 模型分析 3、模型三:单线程多路IO复用 模型分析  4、模型四:单线程多路IO复用 + 多线程业务工作

    2024年02月11日
    浏览(36)
  • Linux下网络编程(3)——socket编程实战,如何构建一个服务器和客户端连接

            经过前几篇的介绍,本文我们将进行编程实战,实现一个简单地服务器和客户端应用程序。 编写服务器程序          编写服务器应用程序的流程如下:         ①、调用 socket()函数打开套接字,得到套接字描述符;         ②、调用 bind()函数将套接字

    2024年02月03日
    浏览(64)
  • JAVA写HTTP代理服务器-socket实现

    HTTP代理服务器是一个中间服务器,它负责接收客户端的HTTP请求,然后将请求转发给目标服务器,并将目标服务器返回的响应返回给客户端。代理服务器可以处理各种HTTP请求,如GET、POST、PUT、DELETE等,并可以处理HTTPS请求。在开发Web应用程序时,使用代理服务器可以隐藏后端

    2024年02月03日
    浏览(33)
  • 【Java网络编程】基于UDP-Socket 实现客户端、服务器通信

    ​ 哈喽,大家好~我是你们的老朋友: 保护小周ღ   本期为大家带来的是网络编程的 UDP Socket 套接字,基于 UDP协议的 Socket 实现客户端服务器通信 ,Socket 套接字可以理解为是,传输层给应用层提供的一组 API,如此程序,确定不来看看嘛~~ 本期收录于博主的专栏 : JavaEE_保

    2024年02月02日
    浏览(66)
  • 【网络编程】(TCP流套接字编程 ServerSocket API Socket API 手写TCP版本的回显服务器 TCP中的长短连接)

    TCP提供的API主要是两个类:ServerSocket 和 Socket . TCP不需要一个类来表示\\\"TCP数据报\\\"因为TCP不是以数据报为单位进行传输的.是以字节的方式,流式传输 ServerSocket API ServerSocket 是专门给服务器使用的Socket对象. ServerSocket 构造方法: ServerSocket(int port) 创建一个服务端流套接字Socket,并绑

    2024年02月12日
    浏览(59)
  • 【深度学习高效小trick】使用Linux服务器一段时间后出现‘Socket error Event: 32 Error: 10053’,快速带你解决连接失败!

            使用【Xshell】软件的时候,我们通常会把程序挂在【Xshell】主页上,这样可以随时随地的看到深度学习代码训练的进程。但是,把自己的程序挂上一天,或者一段时间不操作【Xshell】,就会出现这个问题。然后,你再次连接还可以连接,就是你的程序得重新跑了。

    2024年01月21日
    浏览(51)
  • 使用Xshell服务器跑程序,用pycharm连接服务器远程开发

    目标: 1.使用Xshell在服务器上创建自己项目需要的虚拟环境 2.用pycharm实现远程服务器的连接(这样就可以在本地debug或者写代码,然后再用xshell在服务器上跑) 一、使用Xshell在服务器上创建自己项目需要的虚拟环境 1.打开Xshell,连接上服务器 2.输入命令 然后就开始pip install所

    2024年02月01日
    浏览(58)
  • Java【网络编程2】使用 TCP 的 Socket API 实现客户端服务器通信(保姆级教学, 附代码)

    📕各位读者好, 我是小陈, 这是我的个人主页 📗小陈还在持续努力学习编程, 努力通过博客输出所学知识 📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽 📙 希望我的专栏能够帮助到你: JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统

    2024年02月05日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包