zoukankan      html  css  js  c++  java
  • java 26

    TCP实现多用户上传文件:

      需要同时给多用户上传文件,这样就得用多线程来实现。

    实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权;

    首先,创建个线程类:(这个线程类执行的是服务器的功能)

      线程类代码:

     1 public class UserThread implements Runnable {
     2 
     3     // 构造方法接收对象
     4     private Socket s;
     5 
     6     public UserThread(Socket s) {
     7         this.s = s;
     8     }
     9 
    10     public void run() {
    11         // 把客户端的代码复制过来
    12         // 不同的客户端传递文件,就看他们各自的带宽情况,抢占线程
    13         try {
    14             // 把通道内的字节流包装成字符流
    15             BufferedReader br = new BufferedReader(new InputStreamReader(
    16                     s.getInputStream()));
    17 
    18             // 封装文件目录
    19             // BufferedWriter bw = new BufferedWriter(new
    20             // FileWriter("TCPto.txt"));
    21 
    22             // 因为上传多个文件,所以文件名字要改变
    23             String newname = System.currentTimeMillis() + ".txt";
    24             BufferedWriter bw = new BufferedWriter(new FileWriter(newname));
    25 
    26             // 获取数据,并输出到文件中
    27             String line = null;
    28             while ((line = br.readLine()) != null) {
    29                 bw.write(line);
    30                 bw.newLine();
    31                 bw.flush();
    32             }
    33 
    34             // 给出反馈
    35             BufferedWriter bwr = new BufferedWriter(new OutputStreamWriter(
    36                     s.getOutputStream()));
    37             bwr.write("你的文件上传成功!");
    38             bwr.newLine();
    39             bwr.flush();
    40 
    41             // 释放资源
    42             s.close();
    43             bw.close();
    44 
    45         } catch (IOException e) {
    46             e.printStackTrace();
    47         }
    48     }
    49 
    50 }

      服务器的代码:

     1 public class ServerDemo {
     2     public static void main(String[] args) throws IOException {
     3 
     4         // 创建ServerSocket对象,监听
     5         ServerSocket ss = new ServerSocket(10010);
     6 
     7         //有客户端上传数据就执行
     8         while(true){
     9             //创建Socket对象
    10             Socket s = ss.accept();
    11             //执行线程
    12             new Thread(new UserThread(s)).start();
    13             
    14         }
    15     }
    16 }

      客户端的代码:(只改动名字那里,目前只能这样改。。。)

     1 public class ClientDemo {
     2     public static void main(String[] args) throws IOException {
     3 
     4         // 创建Socket对象
     5         Socket s = new Socket("172.19.12.233", 10010);
     6 
     7         // 封装文件目录
     8         BufferedReader br = new BufferedReader(new FileReader(
     9                 "InetAddressDemo.java"));
    10 
    11         // 把通道内的字节流包装成字符流
    12         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
    13                 s.getOutputStream()));
    14 
    15         // 获取文件中的数据,并输出给服务器
    16         String line = null;
    17         while ((line = br.readLine()) != null) {
    18 
    19             bw.write(line);
    20             bw.newLine();
    21             bw.flush();
    22         }
    23         
    24         //给服务器一个信号,上面的文本中的数据已经传递完毕
    25         s.shutdownOutput();
    26         
    27         // 接收反馈
    28         BufferedReader brr = new BufferedReader(new InputStreamReader(
    29                 s.getInputStream()));
    30 
    31         // 获取反馈,并输出到控制台
    32         String line1 = null;
    33         while ((line1 = brr.readLine()) != null) {
    34             System.out.println(line1);
    35         }
    36         
    37         brr.close();
    38         s.close();
    39         br.close();
    40 
    41     }
    42 }
  • 相关阅读:
    support STL Viewer with WordPress On SAE
    个人自建网店(WordPress WooCommerce on SAE)集成支付宝支付
    问题解决: WordPress on SAE注册邮件无法发送
    移除Strorefront站点footer上的Storefront Design By WooThemes字样
    添加站点图标: 为SAE上的WordPress站点添加自己的Favicon
    在SAE上搭建自定义版本WordPress, 并用SAE Storage代替WordPress Uploads
    swift + xcode 新手上路
    Mac Yosemite下Android Studio环境问题集合
    分支(选择)语句
    Java入门
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5965444.html
Copyright © 2011-2022 走看看