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();
    }
}
相关推荐
亦暖筑序3 小时前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏3 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev5 小时前
ButterKnife → ViewBinding
android·java·kotlin
像我这样帅的人丶你还20 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩21 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia21 小时前
Mybatis的日志输入
java
亦暖筑序1 天前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户298698530141 天前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao1 天前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿1 天前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试