353 TCP通信程序练习5(上传文件服务器给出反馈)
【练习5】
客户端,数据来自文本文件,接收服务器反馈
服务端,接收到的数据写入文本文件,给出反馈
【代码思路】
需要有结束标记(例如over、886),否则运行起来,服务器、客户端都会进入等待,等待对方发送数据后读数据。
必须有结束标记,才能互相确认数据已发送,可以开始读取、前进了。
但如果发送的数据中有和自定义的结束标记相同的字符,系统将停止接收数据。
这就用到Socket的两个方法:shutdownInput()、shutdownOutput()
---------------------------------------------
public class Prepare {…}
---------------------------------------------
package TCPPra5;
import java.io.*;
import java.net.Socket;
public class ClientDemoOriginalEdition {
public static void main(String[] args) throws IOException {
Socket s = new Socket("192.168.43.241", 10535);
BufferedReader br = new BufferedReader(new FileReader("myNet\\src\\TCPPra5\\353a.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//给出结束标记
// bw.write("over");
// 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();
}
}
---------------------------------------------
package TCPPra5;
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(10535);
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bw = new BufferedWriter(new FileWriter("myNet\\src\\TCPPra5\\353b.txt"));
String line;
while ((line = br.readLine()) != null) {
//判断客户端是否已发送数据
// if ("over".equals(line)){
bw.write(line);
bw.newLine();
bw.flush();
// }
}
//给出反馈
BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bwServer.write("SUCCESS");
bwServer.newLine();
bwServer.flush();
ss.close();
bw.close();
}
}