网络编程
InetAddress类
表示IP对象的一个类
public static void main(String[] args) throws UnknownHostException {
//获取本机的ip对象
// InetAddress ip = InetAddress.getLocalHost();
//获取域名
// System.out.println(ip.getHostName());
//获取真实ip地址
// System.out.println(ip.getHostAddress());
//getByName(域名) 得到域名对应的ip对象
//localhost域名表示本机,对应的ip地址为127.0.0.1
InetAddress ip = InetAddress.getByName("localhost");
//获取域名
System.out.println(ip.getHostName());
//获取ip地址
System.out.println(ip.getHostAddress());
}
Socket类和ServerSocket类
都属于Socket(套接字)对象,表示网络中的某个端点
- Socket指普通端
- ServerSocket指服务器端
使用套接字对象实现两个端点(Socket和ServerSocket)之间发送文件
服务器端
package com.hqyj.uploadTest;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* 使用套接字对象,实现客户端向服务端发送文件
*
* 定义服务端套接字对象
客户端
* */
public class Server {
public static void main(String[] args) throws IOException {
//以本机创建服务端套接字对象
ServerSocket server = new ServerSocket(8899, 100,
InetAddress.getLocalHost());
//等待客户端连接,返回连接的客户端套接字对象
Socket client = server.accept();
//定义要将读取到的数据写入到本地的文件字节输出流对象
FileOutputStream fos = new FileOutputStream("上传文件.md");
//获取客户端与服务端的输入流对象,读取发送的数据
InputStream is = client.getInputStream();
//定义读取的字节数组
byte[] bytes = new byte[1024 * 1024 * 8];
int count = is.read(bytes);
while (count != -1) {
//将读取到的数据写入到本地
fos.write(bytes, 0, count);
count = is.read(bytes);
}
fos.close();
is.close();
}
}
客户端
package com.hqyj.uploadTest;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
/*
* 定义客户端套接字对象
* */
public class Client {
public static void main(String[] args) throws IOException {
//创建客户端套接字对象,连接指定的服务端套接字对象
Socket client = new Socket("192.168.31.39", 8899);
//获取客户端与服务端的输出流对象
OutputStream os = client.getOutputStream();
//成功连接后,将某个文件发送给服务端
//定义要发送的文件对象
File file = new File("F:\\221001\\笔记\\面向对象部分回顾.md");
//读取要发送的文件
FileInputStream fis = new FileInputStream(file);
作业
//定义字节数组
byte[] bytes = new byte[1024 * 1024 * 8];
//循环读取要发送的文件
int count = fis.read(bytes);
while (count != -1) {
//将读取到的数据写入到客户端套接字与服务端套接字的通道中
os.write(bytes,0,count);
count = fis.read(bytes);
}
fis.close();
os.close();
}
}
练习
class Student{
private String no;
private String name;
}
//请选择功能
//1.读取信息
读取"信息"文件夹中的所有文件,获取其文件名,该文件名由"学号+姓名"组成。
//2.保存信息
将获取到的文件名拆解为学号和姓名后,作为学生的属性,创建学生对象进行保存。
将学生对象保存到集合中,将该集合序列化,保存为一个文件。
//3.加载信息
反序列化之前保存的集合文件。读取该文件,输出所有的学生信息
Student类
package day7.com.hqyj.HomeWork;
import java.io.Serializable;
import java.util.Objects;
public class Student implements Serializable {
private String no;
private String name;
public Student(String no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(no, student.no) &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(no, name);
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Main类
package day7.com.hqyj.HomeWork;
import day7.com.hqyj.ObjectStream.Person;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static ArrayList<Student> list = new ArrayList<>();
public static void main(String[] args) throws IOException, ClassNotFoundException {
File file = new File("D:\\hqyjJava\\信息");
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("菜单");
System.out.println("1.读取信息");
System.out.println("2.保存信息");
System.out.println("3.输出");
System.out.println("4.退出");
switch (sc.nextInt()) {
case 1:
fun(file);
break;
case 2:
// System.out.println(list);
OutputStream os = new FileOutputStream("D:\\hqyjJava\\id.p");
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(list);
oos.close();
break;
case 3:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\hqyjJava\\id.p"));
ArrayList<Student> pList = (ArrayList)ois.readObject();
for (Student student : pList) {
System.out.println(student);
}
ois.close();
break;
case 4:
System.exit(0);
}
}
}
/*
* 初始化数据
* 读取提供的文件夹,读取其中的文件名,获取相关信息
*
* */
public static void fun(File file){
if(file.isFile()){
System.out.println(file.getName().substring(0,9)+"\t"+file.getName().substring(11,file.getName().indexOf(".")));
Student student = new Student(file.getName().substring(0, 9), file.getName().substring(11, file.getName().indexOf(".")));
list.add(student);
// System.out.println(list);
}else{
for (File listFile : file.listFiles()) {
fun(listFile);
}
}
}
}