TCP数据传输(七):多线程改进多个客户端上传文件案例

来源:互联网 发布:奥飞娱乐怎么样 知乎 编辑:程序博客网 时间:2024/04/28 01:10

TCP数据传输(七):多线程改进多个客户端上传文件案例

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

 

public class UserThread implementsRunnable {

         privateSocket s;

 

         publicUserThread(Socket s) {

                   this.s= s;

         }

 

         @Override

         publicvoid run() {

                   try{

                            //封装通道内的流

                            BufferedReaderbr = new BufferedReader(new InputStreamReader(

                                               s.getInputStream()));

                            //封装文本文件

                            //BufferedWriter bw = new BufferedWriter(new

                            //FileWriter("Copy.java"));

 

                            //为了防止名称冲突

                            StringnewName = System.currentTimeMillis() + ".java";

                            BufferedWriterbw = new BufferedWriter(new FileWriter(newName));

 

                            Stringline = null;

                            while((line = br.readLine()) != null) { // 阻塞

                                     bw.write(line);

                                     bw.newLine();

                                     bw.flush();

                            }

 

                            //给出反馈

                            BufferedWriterbwServer = new BufferedWriter(

                                               newOutputStreamWriter(s.getOutputStream()));

                            bwServer.write("文件上传成功");

                            bwServer.newLine();

                            bwServer.flush();

 

                            //释放资源

                            bw.close();

                            s.close();

                   }catch (IOException e) {

                            e.printStackTrace();

                   }

         }

 

}

 

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

 

public classUploadServer {

   public static void main(String[] args)throws IOException {

      // 创建服务器Socket对象

      ServerSocketss = newServerSocket(11111);

 

      while (true) {

         Sockets = ss.accept();

         new Thread(new UserThread(s)).start();

      }

   }

}

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

 

public classUploadClient {

   public static void main(String[] args)throws IOException {

      // 创建客户端Socket对象

      Sockets = newSocket("192.168.12.92", 11111);

 

      // 封装文本文件

      // BufferedReader br = new BufferedReader(newFileReader(

      // "InetAddressDemo.java"));

      BufferedReaderbr = newBufferedReader(newFileReader(

            "ReceiveDemo.java"));

      // 封装通道内流

      BufferedWriterbw = newBufferedWriter(newOutputStreamWriter(

            s.getOutputStream()));

 

      Stringline = null;

      while ((line = br.readLine())!=null){ // 阻塞

         bw.write(line);

         bw.newLine();

         bw.flush();

      }

 

      // Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了

      s.shutdownOutput();

 

      // 接收反馈

      BufferedReaderbrClient = newBufferedReader(newInputStreamReader(

            s.getInputStream()));

      Stringclient = brClient.readLine(); // 阻塞

      System.out.println(client);

 

      // 释放资源

      br.close();

      s.close();

   }

}

0 0