java网络编程

网络编程

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);
            }
        }
    }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值