Java_网络上传文件与netstat指令

netstat指令:

1.netstat -an可以查看当前主机网络情况,包括端口监听情况和网络链接情况

2.netstat -an | more 可以分页显示

3.要求在dos控制台下执行

应用案例1:

1.编写一个服务端,和一个客户端

2.服务器端在8888端口监听

3.客户端连接到服务端,发送一张图片d:\\test1.png

4.服务器端接收到客户端发送的图片,保存到src下,发送"收到图片"再退出

5.客户端接收到服务端发送的"收到图片",再退出

java 复制代码
package com.javaWeb.Socket;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketTCP04server {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务端在8888端口监听,等待连接.....");

        Socket socket = serverSocket.accept();
        System.out.println("服务器端socket=" + socket.getClass());

        try {
            // 1. 接收图片文件
            InputStream inputStream = socket.getInputStream();

            // 保存到项目src目录下
            String projectDir = System.getProperty("user.dir");
            String savePath = projectDir + "\\src\\received.png";

            try (BufferedOutputStream bufferedOutputStream =
                         new BufferedOutputStream(new FileOutputStream(savePath))) {

                byte[] buffer = new byte[1024];
                int readLen;
                while ((readLen = inputStream.read(buffer)) != -1) {
                    bufferedOutputStream.write(buffer, 0, readLen);
                }
            }

            System.out.println("图片保存完成: " + savePath);

            // 2. 发送响应消息
            OutputStream outputStream = socket.getOutputStream();
            String response = "收到图片";
            outputStream.write(response.getBytes("UTF-8"));
            outputStream.flush();

            System.out.println("服务器退出");

        } finally {
            socket.close();
            serverSocket.close();
        }
    }
}
java 复制代码
package com.javaWeb.Socket;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class SocketTCP04cilent {
    public static void main(String[] args) throws Exception{
        Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
        System.out.println("客户端socket返回=" + socket.getClass());

        //2.连接上后,生成Socket,通过socket.getOutputStream()
        OutputStream outputStream = socket.getOutputStream();//会返回一个outputStream
        String filePath = "d:\\test1.PNG";
        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));
        byte c[] = new byte[1024];
        int readLen = 0;
        while((readLen = bufferedInputStream.read(c)) != -1) {
            outputStream.write(c, 0, readLen);
        }
        InputStream inputStream = socket.getInputStream();
        byte c2[] = new byte[1024];
        int readLen1 = 0;
        while((readLen1 = inputStream.read(c2)) != -1) {
            inputStream.read(c2, 0, readLen);
        }
        inputStream.close();
        outputStream.close();
        bufferedInputStream.close();
        socket.close();
    }
}

应用案例2:

服务端逻辑:

  1. 等待客户端连接。

  2. 读取客户端发送的第一行数据,如果是"name",则回复"我是.....",否则打印"你说啥呢"。

  3. 然后读取客户端发送的第二行数据,如果是"hobby",则回复"编写java程序",否则打印"你说啥呢"。

  4. 客户端逻辑:

  5. 连接服务端。

  6. 发送"name",然后接收服务端的回复,应该是"我是.......",否则打印"你说啥呢"。

  7. 发送"hobby",然后接收服务端的回复,应该是"编写java程序",否则打印"你说啥呢"。

java 复制代码
package com.javaWeb.Homework;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

public class Homework01client {
    public static void main(String[] args) throws IOException {
        //1.链接服务端(ip,端口)
        //链接InetAddress.getLocalHost()(本机)的9999端口,如果链接成功,会返回一个socket对象
        Socket socket = new Socket(InetAddress.getLocalHost(), 3366);//InetAddress.getLocalHost()这里可以改为要链接对象的IP地址
        System.out.println("客户端socket返回=" + socket.getClass());
        OutputStream outputStream = socket.getOutputStream();
        //通过输出流,写入数据到数据通道,使用字符流
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("name");
        bufferedWriter.newLine();//插入一个换行符,表示写入的内容结束,要求对方使用readLine方式读取
        bufferedWriter.flush();//如果使用字符流,需要手动刷新

        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        if(!(s.equals("我是刘任"))){
            System.out.println("你说啥呢");
        }
        System.out.println(s);

        bufferedWriter.write("hobby");
        bufferedWriter.newLine();
        bufferedWriter.flush();
        String s1 = bufferedReader.readLine();
        if(!(s1.equals("编写java程序"))){
            System.out.println("你说啥呢");
        }
        System.out.println(s1);

        bufferedReader.close();
        bufferedWriter.close();
        outputStream.close();
        inputStream.close();
        socket.close();
    }
}
java 复制代码
package com.javaWeb.Homework;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Homework01server {
    public static void main(String[] args) throws IOException {
        byte c[] = new byte[1024];
        ServerSocket serverSocket = new ServerSocket(3366); //代表在本机的9999端口监听
        System.out.println("服务端在3366端口监听,等待链接.....");   //此时端口已被占用,无法被其他程序使用

        //2.当没有客户端链接9999端口时,程序会阻塞,等待连接
        //如果有客户端链接,则会返回一个socket对象,程序继续执行
        Socket socket = serverSocket.accept();
        System.out.println("服务器端socket=" + socket.getClass());

        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        if(!(s.equals("name"))){
            System.out.println("你说啥呢");
        }
        System.out.println(s);

        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("我是刘任");
        bufferedWriter.newLine();//插入一个换行符,表示写入的内容结束,要求对方使用readLine方式读取
        bufferedWriter.flush();//如果使用字符流,需要手动刷新

        String s1 = bufferedReader.readLine();
        if(!(s1.equals("hobby"))) {
            System.out.println("你说啥呢");
        }
        System.out.println(s1);

        bufferedWriter.write("编写java程序");
        bufferedWriter.newLine();
        bufferedWriter.flush();

        bufferedReader.close();
        bufferedWriter.close();
        outputStream.close();
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}
相关推荐
怒放吧德德10 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆11 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌14 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊15 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang15 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang16 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解17 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
YuMiao21 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
SimonKing21 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean21 小时前
Jackson View Extension Spring Boot Starter
java·后端