码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Socket网络编程练习题四:客户端上传文件(多线程版)


    题目

    想要服务器不停止,能接收很多客户上传的图片?

    解决方案

    可以使用循环或者多线程
    但是循环不合理,最优解法是(循环+多线程)改写

    代码实战

    客户端代码
    package com.heima;
    
    import java.io.*;
    import java.net.Socket;
    
    public class Client {
        public static void main(String[] args) throws IOException {
            Socket socket = new Socket("127.0.0.1",10000);
    
            //读取本地文件中的数据,并写到服务器中
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("G:\\wjkwk\\clientdir\\123.jpg"));
            BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
            byte[] bytes = new byte[1024];
            int len;
            while ((len = bis.read(bytes)) != -1){
                bos.write(bytes,0,len);
            }
    
            //往服务器写结束标记
            socket.shutdownOutput();
    
            //接收服务器返回的数据
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line = br.readLine();
            System.out.println(line);
            socket.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    服务端代码
    package com.heima;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
    
        public static void main(String[] args) throws IOException {
    
            ServerSocket serverSocket = new ServerSocket(10000);
    
            while (true){
                //等待客户端来连接
                Socket socket = serverSocket.accept();
                //开启一个线程
                //一个用户就对应服务端的一条线程
                new Thread(new MyRunnable(socket)).start();
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    package com.heima;
    
    import java.io.*;
    import java.net.Socket;
    import java.util.UUID;
    
    public class MyRunnable implements Runnable {
    
        Socket socket;
        public MyRunnable(Socket socket){
            this.socket = socket;
        }
        @Override
        public void run() {
    
            try {
                //读取客户端上传的文件并保存到本地
                BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
                String name = UUID.randomUUID().toString().replace("-", "");
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("G:\\wjkwk\\serverdir\\"+name+".jpg"));
                int len;
                byte[] bytes = new byte[1024];
                while ((len = bis.read(bytes)) != -1){
                    bos.write(bytes,0,len);
                }
                //回写数据
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                bw.write("上传成功");
                bw.newLine();
                bw.flush();
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //释放资源
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    运行结果

    在这里插入图片描述

  • 相关阅读:
    【LeetCode54螺旋矩阵、LeetCode59螺旋矩阵II:简单模拟(Java实现,一种思想解决两道题)】
    java-php-python-springboot网上教学系统计算机毕业设计
    Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做
    Python简单实现人脸识别检测, 对某平台美女主播照片进行评分排名
    Python无需import自动加载指定包路径中所有python文件及其中的类和方法
    【学习笔记】Python 使用 matplotlib 画图
    【Java 进阶篇】Ajax 实现——JQuery 实现方式 `get` 与 `post`
    Django Cookie与Session
    IronPDF for Java 2023.9.2 Crack
    KubeSphere安装mysql8
  • 原文地址:https://blog.csdn.net/weixin_43860634/article/details/133421055
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号