354 TCP通信程序练习6(多线程实现文件上传)
(复杂的课)
(代码实际运行结果不理想,重听3,依然不行,暂略)
【练习6】
客户端,数据来自文本文件,接收服务器反馈(与5同)
服务端,接收到的数据写入文本文件,给出反馈,用线程封装代码,为每一个客户端开启一个线程
实际情况中,不需要写close,因为服务器常开不关。
【报错了】
理想的运行结果 | RESULT: SUCCESS |
实际的运行结果 | RESULT: null |
---------------------------------------------
package TCPPra6;
import java.io.*;
import java.net.Socket;
public class ClientDemoOriginalEdition {
public static void main(String[] args) throws IOException {
Prepare.pre1();
Socket s = new Socket("192.168.43.241", 10534);
BufferedReader br = new BufferedReader(new FileReader("myNet\\src\\TCPPra6\\354a.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
s.shutdownOutput();
BufferedReader brClient=new BufferedReader(new InputStreamReader(s.getInputStream()));
String feedback=brClient.readLine();
System.out.println("RESULT: "+feedback);
br.close();
s.close();
}
}
//RESULT: null
---------------------------------------------
package TCPPra6;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemoOriginalEdition {
public static void main(String[] args) throws IOException {
Prepare.pre1();
ServerSocket ss = new ServerSocket(10534);
//为了体现服务器是一直开着的,用while(true)实现客户端的监听
while (true) {
Socket s = ss.accept();
//将来要写一个类,这个类实现Runnable接口,把客户端的Socket对象传过去
new Thread(new ServerThread(s)).start();
//写好上一句后,选中ServerThread按alt enter,快捷创建一个类
}
// ss.close();
}
}
---------------------------------------------
package TCPPra6;
import java.io.*;
import java.net.Socket;
//选中ServerThread按alt enter,快捷生成这个类,并且实现Runnable接口带有一个带参构造方法
public class ServerThread implements Runnable {
private Socket s;
public ServerThread(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
//接收数据,写到文件
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//解决名称冲突问题
int count = 0;
File file = new File("myNet\\src\\TCPPra6\\354[" + count + "].txt");
while (file.exists()) {
count++;
file = new File("myNet\\src\\TCPPra6\\354[" + count + "].txt");
}
BufferedWriter bw = new BufferedWriter(new FileWriter("myNet\\src\\TCPPra6\\354b.txt"));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//给出反馈
BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bwServer.write("SUCCESS");
bwServer.newLine();
bw.flush();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}