第七章 – Java网络编程(二)

导读:本篇文章讲解 第七章 – Java网络编程(二),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

系列文章目录

Java基础篇之jdk、jre环境变量的配置
第一章 – Java基本语法
第六章 – Java集合
第七章 – Java网络编程(一)



前言

因网络编程内容较多且叙述较为繁琐,所以拆分多个章节记录,本篇继续介绍网络编程相关知识点以及相关案例。


一、网络文件上传

要求:

  • 编写一个服务端,和一个客户端
  • 服务端在8888端口监听
  • 客户端连接到服务端,发送一张图片d:\svn.png
  • 服务端接收到客户端发送的图片,保存到src下,发送“收到图片”再退出
  • 客户端接收到服务端发送的“收到图片”,再退出
  • 说明:使用BufferedInputStream 和 BufferedOutputStream字节流

解决思路:

  • 首先按要求在D盘根目录创建一张图片,名命为svn.png
    在这里插入图片描述
  • 通过文件输入流读取磁盘上的文件,用字节数组接收
  • 通过socket获取到输出流, 将bytes数据发送给服务端
  • 服务端通过socket获取输入流,接收客户端发送的bytes数组,然后将bytes数组写入指定路径src\svn.png
  • 使用字符输出流向客户端回复“收到图片”
  • 客户端使用字符输入流读取服务端回复的数据

图文详解:
在这里插入图片描述

具体代码实现:

// 客户端代码实现
// 1.客户端连接服务端8888端口,得到Socket对象
Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
// 2.创建读取磁盘文件的输入流
String filePath = "d:\\svn.png";
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
// bytes就是filePath对应的字节数组
byte[] bytes = StreamUtils.streamToByteArray(bis);
// 3.通过socket获取到输出流, 将bytes数据发送给服务端
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
// 4.将文件对应的字节数组内容写入到数据通道
bos.write(bytes);
bis.close();
// 5.设置结束标记
socket.shutdownOutput();
// 6.接收服务端写入数据管道的数据(字符流)
InputStream inputStream = socket.getInputStream();
String s = StreamUtils.streamToString(inputStream);
System.out.println(s);

// 关闭流和socket
inputStream.close();
bos.close();
socket.close();

// 服务端代码实现
// 1.在本机创建服务端,监听端口8888
ServerSocket serverSocket = new ServerSocket(8888);
// 2.等待连接
System.out.println("等待客户端连接...");
Socket socket = serverSocket.accept();
// 3.读取客户端发送的数据
// 通过socket得到输入流
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
byte[] bytes = StreamUtils.streamToByteArray(bis);
// 4.将得到的bytes写入到指定路径就得到一个文件了
String destFilePath = "src\\qie.png";
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFilePath));
bos.write(bytes);
bos.close();
// 5.向客户端回复“收到图片”(使用字符流)
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write("收到图片");
// 6.将数据刷新入管道
writer.flush();
// 7.设置写入结束标记
socket.shutdownOutput();
// 8.关闭其他资源
writer.close();
bis.close();
socket.close();
serverSocket.close();

程序运行结果:

  • 服务端将图片写入src目录下并回复客户端:“收到图片”:
    在这里插入图片描述
  • 客户端接收服务端回复的数据,并在控制台打印出来:
    在这里插入图片描述

二、netstat

1.netstat指令

1.1 netstat -an可以查看当前主机网络情况,包括端口监听情况和网络连接情况
1.2 netstat – an | more 可以分页显示
1.3 要求在dos控制台下执行(win + r)
1.4 说明:

  • Listening表示某个端口在监听
  • 如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息
  • 可以输入ctrl + c退出指令
  • 以管理员身份运行dos命令,输入netstat -anb可以看到该地址对应运行的程序是什么

1.5 当本机运行一个本机8888端口正在监听,那么dos命令,也会显示

  • idea运行java程序:
    在这里插入图片描述
    cmd输入netstat -an | more命令:
    在这里插入图片描述
    注意:ESTABLISHED表示已经建里连接,外部地址一般指客户端的IP,很多情况下这个IP不会是本机的IP,往往是另一台主机的IP

1.6 以管理员身份运行,输入netstat -anb可以展示ip对应的具体运行的程序
在这里插入图片描述


总结

本篇先介客户端与服务端文件之间的传输以及netstat命令的基本使用,更多内容后续更新。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71707.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!