• 周四. 4月 25th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

java 26

admin

11月 28, 2021

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 }

《java 26》有2个想法
  1. Sight Care is a daily supplement proven in clinical trials and conclusive science to improve vision by nourishing the body from within. The Sight Care formula claims to reverse issues in eyesight, and every ingredient is completely natural.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注