实验九 Java 语言网络通信程序设计练习(课内实验)

一、实验目的

  1. 本次实验的主要目的是练习网络通信程序的设计方法,并掌握计算机网络基
  2. 础知识、Java语言网络通信程序类库的结构和使用方法。

二、实验要求

  1. 1. 认真阅读实验内容,完成实验内容所设的题目。
  2. 2. 能够应用多种编辑环境编写Java语言源程序。
  3. 3. 认真体会计算机网络和Java语言网络通信程序的概念。
  4. 4. 将实验结果书写在实验报告中。

三、实验内容

运行下列程序,观察程序的运行结果

A.程序一

package org.example;import java.io.*;
import java.util.Scanner;
import java.net.InetAddress;
import java.net.UnknownHostException;public class Main {public static void main(String[] args) throws Exception {InetAddress inet = InetAddress.getByName("www.baidu.com");System.out.println(inet);System.out.println(inet.getHostName());System.out.println(inet.getHostAddress());InetAddress inet1 = InetAddress.getLocalHost();System.out.println(inet1);System.out.println(inet1.getHostName());System.out.println(inet1.getHostAddress());}
}

运行结果如下

 

B.程序二

服务器端(Main)

package org.example;// 服务器端
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;public class Main {public static void main(String[] args) {ServerSocket ss = null;Socket s = null;InputStream is = null;OutputStream os = null;try {ss = new ServerSocket(9090);s = ss.accept();is = s.getInputStream();byte[] b = new byte[20];int len;while ((len = is.read(b)) != -1) {String str = new String(b, 0, len);System.out.print(str);}System.out.println("收到来自于" + s.getInetAddress().getHostAddress() + "的连接");os = s.getOutputStream();os.write("我已收到你的信息".getBytes());} catch (IOException e) {e.printStackTrace();} finally {if (is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}if (s != null) {try {s.close();} catch (IOException e) {e.printStackTrace();}}if (ss != null) {try {ss.close();} catch (IOException e) {e.printStackTrace();}}}}
}

运行完服务器端后再运行客户端返回看即可出现127.0.0.1 

客户端(Client)

package org.example;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;public class Client {public static void main(String[] args) {Socket socket = null;OutputStream os = null;InputStream is = null;try {socket = new Socket(InetAddress.getByName("127.0.0.1"), 9090);os = socket.getOutputStream();os.write("我是客户端,请多关照".getBytes());socket.shutdownOutput();is = socket.getInputStream();byte[] b = new byte[20];int len;while ((len = is.read(b)) != -1) {String str = new String(b, 0, len);System.out.print(str);}} catch (IOException e) {e.printStackTrace();} finally {if (os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null) {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

先运行Main然后再运行Client

运行结果如下

C.程序三

接收端(UDPserver)

package org.example;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;public class UDOserver {public static void main(String[] args) {DatagramSocket ds = null;try {ds = new DatagramSocket(9090);byte[] b = new byte[1024];DatagramPacket pack = new DatagramPacket(b, 0, b.length);ds.receive(pack);String str = new String(pack.getData(), 0, pack.getLength());System.out.println(str);} catch (IOException e) {e.printStackTrace();} finally {if (ds != null) {ds.close();}}}
}

发送端(UDPclient)

package org.example;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;public class UDPclient {public static void main(String[] args) {DatagramSocket ds = null;try {ds = new DatagramSocket();byte[] b = "你好,我是要发送的数据".getBytes();DatagramPacket pack = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 9090);ds.send(pack);} catch (IOException e) {e.printStackTrace();} finally {if (ds != null) {ds.close();}}}
}

D.程序四

package org.example;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class Fyt {public static void main(String[] args) throws Exception {URL url = new URL("http://www.hhdu.edu.cn/85/c9/c23a34249/page.htm");System.out.println(url.getProtocol());System.out.println(url.getHost());System.out.println(url.getPort());System.out.println(url.getFile());System.out.println(url.getRef());System.out.println(url.getQuery());InputStream is = url.openStream();byte[] b = new byte[20];int len;len = is.read(b);String str = new String(b, 0, len);System.out.print(str);is.close();URLConnection urlConn = url.openConnection();InputStream is1 = urlConn.getInputStream();FileOutputStream fos = new FileOutputStream(new File("E:\\桌面文件\\javatxt文档\\a.txt"));byte[] b1 = new byte[20];int len1;while ((len1 = is1.read(b1)) != -1) {fos.write(b1, 0, len1);}fos.close();is1.close();}
}

  1. 1.这个代码类似于抓包了,大概意思是从指定的URL上下载文件并将其内容保存到本地文件中。使用URL类创建一个指向特定URL的对象,然后通过对该URL对象调用方法来获取URL的各种属性,如协议、主机名、端口、文件名、引用和查询部分。
  2. 2.接着,打开URL的输入流,从URL地址对应的资源中读取内容。在这里,首先创建一个字节数组b用于存放读取到的数据,使用输入流is的read(b)方法读取数据,然后将字节数组转换成字符串并打印输出。
  3. 3.随后,通过url.openConnection()方法创建一个URLConnection对象,并从中获取输入流is1。然后创建一个FileOutputStream对象fos,将从输入流is1读取的数据写入到本地文件"E:\\桌面文件\\javatxt文档\\a.txt"中。
  4. 4.最后,关闭所有打开的流,释放相关的资源。
  5. 这段代码的作用是连接到指定URL,抓取该URL对应的资源,然后将其内容保存为本地文件。

本地文件如下图所示

四、编写程序完成下列功能

1)编写一个服务器端的程序Server.java,该程序在8000端口监听客户端的

请求,如果与客户端连接后,收到客户端发送的数据不是字符串“bye”,则在服

务器端打印客户端发来的数据,并向客户端回送一条从键盘输入的信息,若客户

端发来的数据是字符串“bye”,则关闭服务器端程序。

package org.example;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class Server {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8000);System.out.println("服务器已启动,等待客户端连接...");while (true) {Socket clientSocket = serverSocket.accept();System.out.println("客户端已连接");BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));Scanner scanner = new Scanner(System.in);String clientMessage;while ((clientMessage = reader.readLine()) != null) {System.out.println("客户端消息:" + clientMessage);if (clientMessage.equals("bye")) {System.out.println("客户端已断开连接");break;} else {System.out.print("请输入要发送给客户端的信息:");String serverResponse = scanner.nextLine();writer.write(serverResponse);writer.newLine();writer.flush();}}reader.close();writer.close();clientSocket.close();if (clientMessage.equals("bye")) {System.out.println("关闭服务器端程序");break;}}serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}

2)编写一个服务器端ServerDemo.java程序,它能够响应客户的请求。如

果这个请求的内容是字符串"hello"的话,服务器仅将"welcome!"字符串返回给用

户。否则将用户的话追加到当前目录的文本文件log.txt中,并向用户返回"OK!"

package org.example;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class ServerDemo {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8001);System.out.println("服务器已启动,等待客户端连接...");while (true) {Socket clientSocket = serverSocket.accept();System.out.println("客户端已连接");BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));String clientMessage = reader.readLine();if ("hello".equals(clientMessage)) {writer.write("welcome!");} else {File file = new File("E:\\桌面文件\\javatxt文档\\a.txt");FileWriter fileWriter = new FileWriter(file, true);BufferedWriter logWriter = new BufferedWriter(fileWriter);logWriter.write(clientMessage);logWriter.newLine();logWriter.close();writer.write("OK!");}writer.newLine();writer.flush();reader.close();writer.close();clientSocket.close();}} catch (IOException e) {e.printStackTrace();}}
}

 五、实验总结

在本次实验中,我们通过编写服务器端和客户端的Java网络通信程序,加深了对计算机网络基础知识和Java语言网络通信程序类库的理解。通过实践,掌握了网络通信程序的设计方法,包括Socket、ServerSocket等类的使用方法,以及如何进行数据的传输和交互。

六、注意!

我个人觉得程序二跟程序三这两个是配套的,先打开服务器端然后打开客户端机进行连接,接着发打开送端以及接收端然后输入内容再回到客户端或者是服务器端接收信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南京观海微电子---电源,从微观角度观看电功率是怎么产生

从微观角度看看无功功率是怎么产生的,在此之前,我们得先知道引起无功功率的元器件是储能器件,主要是电感和电容。 首先,在宏观上,我们知道电感能导致电压超前电流90,可从如下公式推出: 由此可以…

强到离谱!AI绘画Stable Diffusion让商业换装如此简单!AI一键换装,AI绘画教程

今天给大家介绍一款可以让 Stable Diffusion 轻松实现AI一键换装的超强插件—— Inpaint Anything ,它能精准地替换图片中的指定部位,不仅上手简单,而且简直强到离谱! 首先,我们要下载这个插件。插件可看文末扫描获取…

【ARM Cortex-M3指南】7:嵌套向量中断控制器和中断控制

文章目录 七、嵌套向量中断控制器和中断控制7.1 嵌套向量中断控制器概述7.2 基本的中断配置7.2.1 中断使能和清除使能7.2.2 中断设置挂起和清除挂起7.2.3 优先级7.2.4 活跃状态7.2.5 PRIMASK和FAULTMASK特殊寄存器7.2.6 BASEPRI特殊寄存器7.2.7 其他异常的配置寄存器 7.3 设置中…

LSTM计算指示图

掌握网络结构组件构成 输入门、遗忘门、输出门候选记忆细胞记忆细胞隐藏状态ref:6.8. 长短期记忆(LSTM) — 《动手学深度学习》 文档 (gluon.ai)

【论文阅读笔记】Order Matters(AAAI 20)

个人博客地址 注:部分内容参考自GPT生成的内容 论文笔记:Order Matters(AAAI 20) 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…

一分钱不花从HTTP升级到HTTPS

HTTP升级到HTTPS是一个涉及安全性和技术实施的过程,主要目的是为了提升网站数据传输的安全性,防止数据被窃取或篡改。以下是一些关于从HTTP升级到HTTPS的技术性要点和步骤概述,结合上述信息资源: 一、理解HTTPS的重要性 HTTPS (…

IDEA--debug

1. 单点调试的三个级别 Step into:在单步执行时,遇到子函数就进入并且继续单步执行。Step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数…

[图解]SysML和EA建模住宅安全系统-01

1 00:00:00,980 --> 00:00:03,100 接下来,我们来看一下案例 2 00:00:04,930 --> 00:00:06,750 我们这次课程的案例 3 00:00:07,090 --> 00:00:13,800 选用了SysML实用指南的书上 4 00:00:13,810 --> 00:00:16,180 第十七章这个案例 5 00:00:16,350 …

Lib city笔记:TrajectoryDataset

1 AbstractDataset 抽象类,所有数据集的基类 2 TrajectoryDataset 2.1 __init__ 2.2 get_data 2.3 cutter_filter 2.3.1 按照时间间隔切割 2.3.2 按照同一天切割 2.3.3 按照固定窗口长度切割 2.4 get_encoder 2.5 encode_traj 2.6 divid_data 把数据集划分成训练…

DBCHM 数据库 CHM 文档生成工具

介绍 DBCHM 是一款数据库文档生成工具! 该工具从最初支持chm文档格式开始,通过开源,集思广益,不断改进,又陆续支持word、excel、pdf、html、xml、markdown等文档格式的导出。 支持的数据库 SqlServerMySQLOraclePos…

最佳WordPress外贸主题推荐(2024)

WordPress是一个非常受欢迎的建站平台,它具有易用性,并提供了许多功能强大的主题和插件。如果你计划建立一个外贸独立站商城,选择一个适合的WordPress外贸主题至关重要。以下是一些外贸主题应具备的特点: 1. 欧美风格&#xff1a…

Higgins指数-企业可持续发展指数数据集(1990-2022年)

01、数据介绍 Higgins指数是一个企业可持续发展指数,旨在评估企业的环境和社会责任表现。该指数由可持续服装联盟(SAC)推出,是一个行业性的工具,旨在帮助服装和鞋类企业评估其产品和生产过程对环境和社会的影响。 本…

LabVIEW鸡蛋品质智能分级系统

LabVIEW鸡蛋品质智能分级系统 随着现代农业技术的飞速发展,精确、高效的农产品质量控制已成为行业的重要需求。其中,鸡蛋作为日常膳食中不可或缺的重要组成部分,其品质直接关系到消费者的健康与满意度。本文设计并实现了一套基于LabVIEW的鸡…

CMakeLists.txt语法规则:提供信息的变量说明一

一. 简介 前面几篇文章学习了 CMakeLists.txt语法中 部分常用命令。 接下来学习CMakeLists.txt语法中部分常用变量,变量也是 cmake 中的一个重头戏,cmake 提供了很多内置变量。每一个变量都有它自己的含义,可以通过如下链接地址查询到所有…

危险!48篇问题文章曝光!这本Frontiers“水刊”3年扩刊26倍!

据最新统计,FRONTIERS IN SURGERY以48篇质疑文章领跑质疑榜。FRONTIERS IN SURGERY创刊于2014年,是一本开源期刊,主要发表有关外科实践的进展和研究成果。该期刊的各方面数据怎么样呢?接下来,小编就带着大家来解析一下…

Photoshop前言

Photoshop前言 分辨率图像格式工具界面组件 分辨率 分辨率是指单位长度内包含的像素点的数量,其单位通常为像素/英寸(ppi),300ppi表示每英寸包含300个像素点。对于1英寸1英寸大小的图像,若分辨率为72ppi,则…

udp/tcp回显网络编程

udp DatagramSocket 用于接收和发送udp数据报 构造方法: DatagramSocket():创建一个UDP数据报套接字的Socket,绑定到本地上 一个随机可用端口上,一般用于客户端DatagramSocket(int port):创建一个UDP数据报套接字的Socket,绑定到…

玩comfyui踩过的坑之使用ComfyUI_Custom_NODES_ALEKPET翻译组件问题

环境: 秋叶安装包,安装ComfyUI_Custom_NODES_ALEKPET组件或者直接下载网盘中的包,直接解压包到comfyui根目录/custom_nodes/,重启后,按指导文件操作。 注意:网盘指导包中有配置好的流程json文件&#xff0…

Python爬虫:XPath解析爬取豆瓣电影Top250示例

一、示例的函数说明: 函数processing():用于处理字符串中的空白字符,并拼接字符串。 主函数程序入口:每页显示25部影片,实现循环,共10页。通过format方法替换切换的页码的url地址。然后调用实现爬虫程序的…

平衡二叉搜索树(AVL)旋转

单独开一章节介绍 RotateL 、 RotateR 及更复杂的 LR 和 RL 型旋转,更多是为了红黑树的旋转部分做铺垫;由于 AVL 树和红黑树发生旋转的判断标准不同 —— 分别为平衡因子和节点的颜色,两棵树左旋和右旋的在细节上会有一些差异,但从…