Java实验六 网络和数据库

1. 利用InetAddress编写程序接受用户输入网址,输出这个网址的主机IP地址。

package project;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
public class GetIPAddress {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入网址: ");String hostname = scanner.nextLine();try {InetAddress address = InetAddress.getByName(hostname);String ipAddress = address.getHostAddress();System.out.println("网址的主机IP地址是: " + ipAddress);} catch (UnknownHostException e) {System.out.println("无法解析该网址的主机IP地址。");}}
}

2. 利用Socket编写一个服务器端程序和一个客户端程序,要求服务器端程序运行后监听指定端口,检测到客户端程序连接并发来数据后,服务器端对该数据进行处理并传回客户端一段信息。

Server.java

package project;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {public static void main(String[] args) {int port = 8000;try {ServerSocket serverSocket = new ServerSocket(port);System.out.println("服务器已启动,正在监听端口 " + port);while (true) {Socket clientSocket = serverSocket.accept();System.out.println("客户端已连接,来自 " + clientSocket.getInetAddress());// 处理客户端请求handleClientRequest(clientSocket);}} catch (IOException e) {e.printStackTrace();}}private static void handleClientRequest(Socket clientSocket) throws IOException {// 获取输入流和输出流InputStream inputStream = clientSocket.getInputStream();OutputStream outputStream = clientSocket.getOutputStream();// 读取客户端数据byte[] buffer = new byte[1024];int bytesRead = inputStream.read(buffer);String requestData = new String(buffer, 0, bytesRead);System.out.println("接收到客户端数据: " + requestData);// 对客户端数据进行处理String responseData = "服务器已收到你的消息";byte[] responseBuffer = responseData.getBytes();// 向客户端发送响应数据outputStream.write(responseBuffer);outputStream.flush();// 关闭资源inputStream.close();outputStream.close();clientSocket.close();System.out.println("连接已关闭");}
}

Client.java

package project;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {public static void main(String[] args) {String serverAddress = "127.0.0.1";int serverPort = 8000;try {Socket socket = new Socket(serverAddress, serverPort);// 发送数据到服务器String requestData = "Hello, Server!";byte[] requestBuffer = requestData.getBytes();OutputStream outputStream = socket.getOutputStream();outputStream.write(requestBuffer);outputStream.flush();System.out.println("发送数据到服务器: " + requestData);// 接收服务器响应InputStream inputStream = socket.getInputStream();byte[] responseBuffer = new byte[1024];int bytesRead = inputStream.read(responseBuffer);String responseData = new String(responseBuffer, 0, bytesRead);System.out.println("收到服务器响应: " + responseData);// 关闭资源inputStream.close();outputStream.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

3. 安装并配置MySQL数据库,并准备好JDBC所需驱动(相关程序可从:课件资料/工具 的目录下载)。利用SQL语句创建“JDBCTest”库、“website”表。其中,要求“website”表至少含有如下字段:name(站点名称,字符型)、alexa(Alexa排名,整型)、country(所属国家字符型)。

4. 利用JDBC编程,向website表中增添数据。利用JDBC编程,获取website表的所有数据并输出。

package project;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class MySQLTest {
String databaseName="jdcbtest";//数据库名String user = "root";//使用管理员账号启动String pwd = "123";//数据库密码String URL = "jdbc:mysql://localhost:3306/"+databaseName+"?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false";String DRIVER = "com.mysql.jdbc.Driver";public static void main(String[] args) {MySQLTest myJDBC = new MySQLTest();myJDBC.connect();}public void connect() {Connection connection = null;Statement statement = null;try {Class.forName(DRIVER);connection = DriverManager.getConnection(URL, user, pwd);statement = connection.createStatement();int count_insert  =  statement.executeUpdate("INSERT INTO website VALUES ('lihua','1','china');");System.out.println("插入" + count_insert + "条记录");String query = "SELECT * FROM website;";ResultSet resultSet = statement.executeQuery(query);//展开结果集数据库int i = 0;while (resultSet.next()) {// 通过字段检索String name = resultSet.getString("name");int alexa = resultSet.getInt("alexa");String country = resultSet.getString("country");// 输出数据System.out.println("第" + (++i) + "的数据为:");System.out.println("name: " + name);System.out.println("alexa: " + alexa);System.out.println("country: " + country);}resultSet.close();statement.close();connection.close();} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();} finally {try {if (statement != null)statement.close();if(connection!=null)connection.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}}

5. 利用2-4题内容,将第2题的服务器改写升级,使之可以保存客户端的发来的数据。(提示:可以按需要保存数据,自行设计服务器端相关表结构)

Server.java

package project;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class Server {public static void main(String[] args) {int port = 12345;try (ServerSocket serverSocket = new ServerSocket(port)) {System.out.println("Server listening on port " + port);while (true) {try (Socket clientSocket = serverSocket.accept();InputStream inputStream = clientSocket.getInputStream();OutputStream outputStream = clientSocket.getOutputStream()) {// 读取客户端发送的数据byte[] buffer = new byte[1024];int bytesRead = inputStream.read(buffer);String clientData = new String(buffer, 0, bytesRead);// 处理数据并保存到数据库saveDataToDatabase(clientData);// 打印所有数据printAllDataFromDatabase();// 发送回应给客户端String response = "Server received data: " + clientData;outputStream.write(response.getBytes());} catch (IOException e) {e.printStackTrace();} catch (Exception e) {throw new RuntimeException(e);}}} catch (IOException e) {e.printStackTrace();}}private static void saveDataToDatabase(String data)throws Exception {// 数据库连接信息Class.forName("com.mysql.jdbc.Driver");String jdbcUrl = "jdbc:mysql://localhost:3306/JDBCTest";String user = "root";String password = "123";try (Connection connection = DriverManager.getConnection(jdbcUrl, user, password)) {// 插入数据的SQL语句String insertQuery = "INSERT INTO client_data (data) VALUES (?)";try (PreparedStatement preparedStatement = connection.prepareStatement(insertQuery)) {preparedStatement.setString(1, data);preparedStatement.executeUpdate();}} catch (SQLException e) {e.printStackTrace();}}private static void printAllDataFromDatabase() throws Exception{// 数据库连接信息Class.forName("com.mysql.cj.jdbc.Driver");String jdbcUrl = "jdbc:mysql://localhost:3306/JDBCTest";String user = "root";String password = "12345";try (Connection connection = DriverManager.getConnection(jdbcUrl, user, password)) {// 查询所有数据的SQL语句String selectQuery = "SELECT * FROM client_data";try (PreparedStatement preparedStatement = connection.prepareStatement(selectQuery);ResultSet resultSet = preparedStatement.executeQuery()) {// 打印查询结果System.out.println("All data in client_data table:");while (resultSet.next()) {int id = resultSet.getInt("id");String data = resultSet.getString("data");System.out.println("ID: " + id + ", Data: " + data);}System.out.println();}} catch (SQLException e) {e.printStackTrace();}}
}

Client.java

package project;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Client {public static void main(String[] args) {String serverHost = "localhost";int serverPort = 12345;try (Socket socket = new Socket(serverHost, serverPort);OutputStream outputStream = socket.getOutputStream();InputStream inputStream = socket.getInputStream()) {// 获取当前时间并格式化SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String currentTime = dateFormat.format(new Date());// 发送带有时间的数据给服务器String dataToSend = "Hello, Server! " + currentTime;outputStream.write(dataToSend.getBytes());// 接收服务器的回应byte[] buffer = new byte[1024];int bytesRead = inputStream.read(buffer);String serverResponse = new String(buffer, 0, bytesRead);System.out.println("Server response: " + serverResponse);} catch (IOException e) {e.printStackTrace();}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

猎板PCB2到10层数的科技进阶与应用解析

1. 单层板(Single-sided PCB) 定义:单层板是最基本的PCB类型,导线只出现在其中一面,因此被称为单面板。限制:由于只有一面可以布线,设计线路上有许多限制,不适合复杂电路。应用&…

分布式任务调度实现原理

目录 分布式任务调度功能 分布式任务调度实现 1.Scheduler(调度器) 2.Trigger(触发器) 3.Job(任务) 分布式任务调度框架 xxl-job quartz Snail Job PowerJob elastic-job 分布式任务调度功能 通…

qt QFontDialog详解

1、概述 QFontDialog 是 Qt 框架中的一个对话框类,用于选择字体。它提供了一个可视化的界面,允许用户选择所需的字体以及相关的属性,如字体样式、大小、粗细等。用户可以通过对话框中的选项进行选择,并实时预览所选字体的效果。Q…

qt QStandardItem详解

1、概述 QStandardItem是Qt框架中QStandardItemModel的一个基础元素,用于在基于项的模型(如QStandardItemModel)中表示单个数据项。QStandardItem可以存储文本、图标、工具提示等丰富的信息,并且支持数据的编辑和自定义显示。通过…

【每日一题】LeetCode - 最接近的三数之和

LeetCode 的「最接近的三数之和」问题要求我们从给定整数数组中找到三个数的和,使它最接近目标值。适合初学者的原因在于它结合了双指针、排序等基本技巧,为大家理解基本的算法和数据结构提供了一个很好的机会。 如果你不知道什么是双指针可以参考我之前…

【青牛科技】GC8549替代LV8549/ONSEMI在摇头机、舞台灯、打印机和白色家电等产品上的应用分析

引言 在现代电子产品中,控制芯片的性能直接影响到设备的功能和用户体验。摇头机、舞台灯、打印机和白色家电等领域对控制精度、功耗和成本等方面的要求日益提高。LV8549/ONSEMI等国际品牌的芯片曾是这些产品的主要选择,但随着国内半导体技术的进步&…

教育机构如何利用知识中台进行数字教学

在教育行业,数字化转型已成为提升教学质量和效率的关键。知识中台作为一种新兴的技术平台,为教育机构提供了一个集中化、智能化的知识管理和应用解决方案。本文将探讨教育机构如何利用知识中台进行数字教学,以及这一转型带来的优势。 1. 知识…

项目审核系统 ---(连接数据库---项目模拟)

本章主要是查询方法和修改方法 编写查询方法,查询所有项目审核信息并返回查询结果,需实现分页功能,注意必要的异常处理。编写查询方法,根据项目编号查询指定项目的审核信息,注意必要的异常处理。编写修改方法&#xf…

C语言 | Leetcode C语言题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; char * findLongestWord(char * s, char ** d, int dSize){char *result "";int max -1;for (int i 0; i < dSize; i) {char *p s, *q d[i];int j 0, k 0;while (p[j] ! \0 && q[k] ! \0) {if (p[j] q[k]) {k…

Git详细使用

本地项目托管到码云中教程 1. 使用git init 命令&#xff0c;git init命令用于在目录中创建新的 Git 仓库。 在目录中执行git init就可以创建一个 Git 仓库了。 2. 使用git status命令查看未提交的文件 3. 使用git add . 命令将所有文件添加到暂存区 4. 使用git commit -m &qu…

开源办公软件 ONLYOFFICE 深入探索

文章目录 引言1. ONLYOFFICE 创建的背景1. 1 ONLYOFFICE 项目启动1. 2 ONLYOFFICE 的发展历程 2. 核心功能介绍2. 1 桌面编辑器2. 1. 1 文档2. 1. 2 表格2. 1. 3 幻灯片 2. 2 协作空间2. 3 文档编辑器 - 本地部署版 3. 技术介绍4. 安装5. 优势与挑战6. 个人体验7. 强大但不止于…

Day95 Docker

Docker的使用 1、Docker是什么 docker是一个用来管理镜像的容器 容器(container)&#xff1a;可以装东西 镜像( image )&#xff1a;所谓的镜像&#xff0c;你可以认为就是一个虚拟机 虚拟机&#xff1a;用软件代理硬件来模拟整个计算机的这样一套软件就成为 虚拟机 镜像说白了…

WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查

目录 开始前准备的数据库dbblog如下&#xff1a; 第一步&#xff1a;创建项目后下载四个NuGet程序包 第二步&#xff1a;删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML 并且在App.XAML中将启动项改为Login.XA…

多模态PaliGemma——Google推出的基于SigLIP和Gemma的视觉语言模型

前言 本文怎么来的呢&#xff1f;其实很简单&#xff0c;源于上一篇文章《π0——用于通用机器人控制的流匹配VLA模型&#xff1a;一套框架控制7种机械臂(改造了PaliGemma和ACT的3B模型)》中的π0用到了PaliGemma 故本文便来解读下这个PaliGemma 第一部分 PaliGemma 1.1 Pal…

微服务day03

导入黑马商城项目 创建Mysql服务 由于已有相关项目则要关闭DockerComponent中的已开启的项目 [rootserver02 ~]# docker compose down WARN[0000] /root/docker-compose.yml: version is obsolete [] Running 4/4✔ Container nginx Removed …

IAPP仿源码大师主界面UI

仿源码大师首页主界面的布局 首页&#xff0c;分类&#xff0c;需求&#xff0c;我的 就只有这几个界面内容而已 资源静态 没有任何动画和功能 纯UI布局 纯UI布局 https://pan.baidu.com/s/1Hc5nWQCZ_ckQlXXV82OYpA?pwd7826 https://caiyun.139.com/m/i?2i2MoYbkdze41 来源…

mmpretrainmmdetection环境配置

mmpretrain&mmdetection环境配置 适用于cuda11.3torch12.1的mmpretrain&mmdetection环境配置&#xff1a; 第一步&#xff1a;根据官网说明&#xff0c;找到对应cuda版本的torch&#xff0c;安装好torch&#xff1a; pip install torch1.12.1cu113 torchvision0.13.…

【数据湖及大数据方案】数据湖建设方案|数据源|数据流|元数据|数据仓库|指标池|数据清洗

建设大数据湖一体化平台旨在应对数据分散、管理混乱及利用低效等挑战。通过集中存储与管理跨平台数据&#xff0c;打破信息孤岛&#xff0c;实现数据资产的高效整合与利用。该平台强化数据标准、质量控制、开发运维及安全保障&#xff0c;提升数据治理成熟度。此外&#xff0c;…

搭建企业私有云 只需一台设备 融合计算、存储与K8s

Infortrend老牌存储厂商推出 KS 企业私有云产品&#xff0c;将计算节点、存储与Kubernetes整合在一套系统中&#xff0c;为企业提供高效稳定的专属本地私有云平台。 KS 同时内置 Kubernetes 平台和虚拟机管理程序&#xff0c;既能运行云原生容器化应用程序&#xff0c;例如大数…

[Redis] Redis主从复制模式

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…