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();
}
}