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();
    }
}
相关推荐
编程修仙17 分钟前
第二篇 搭建第一个spring程序
java·数据库·spring
咕噜签名-铁蛋17 分钟前
如何挑选服务器
运维·服务器
爱吃烤鸡翅的酸菜鱼20 分钟前
【RabbitMQ】发布订阅架构深度实践:构建高可用异步消息处理系统
java·spring boot·分布式·后端·websocket·架构·rabbitmq
组合缺一22 分钟前
Solon AI 开发学习10 - chat - 工具调用概念介绍
java·人工智能·学习·ai·llm·solon
曼巴UE525 分钟前
UE5 C++ TSet 创建初始和迭代
java·c++·ue5
TangGeeA25 分钟前
Linux CFS(完全公平调度器)全面总结
java·linux·服务器
灵魂学者26 分钟前
Vue3.x —— router 路由配置
服务器·前端·vue.js·路由
Web3VentureView27 分钟前
Synbo 产品发布会在吉隆坡举行:重构 Web3 一级市场融资模式
网络·人工智能·重构·web3·区块链·synbo
帧栈27 分钟前
并发编程原理与实战(三十九)并发基石ArrayBlockingQueue与LinkedBlockingQueue的底层实现与API设计解析
java