客户端代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCP_Client_Demo3 {
public static void main(String[] args) throws UnknownHostException, IOException {
/*方法说明:(缓冲区默认大小8K 8192字节,即使不flush满了也会自动刷到目的地)
*模拟实现:上传文本文件!*/
File file = new File("c:\\client.txt");
//省略了健壮性判断
Socket s = new Socket("127.0.0.1",10005);
//关联源
BufferedReader bufr =
new BufferedReader(new FileReader(file));
//关联目的 PrintWriter和true同在
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//一顿狂读
String line = null;
while((line=bufr.readLine())!=null){
out.println(line);
}
//关键:告诉服务端,客户端写完了。不然服务端的while结束不了!
s.shutdownOutput();//禁用此套接字的输出流,无返回值
// out.println("!@#$%^&*");或者使用时间戳相对麻烦!
//通过Socket输入流获取服务端返回的"上传成功"提示!
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String str = bufIn.readLine();
System.out.println(str);
bufr.close();
s.close();
}
}
服务端代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCP_Server_Demo3 {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10005);
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+".....connected");
//关联源
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
//关联目的
BufferedWriter bufw = new BufferedWriter(new FileWriter("c:\\server.txt"));
//一顿狂写
String line = null;
while((line=bufIn.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
//newLine与flush()同在!正如PrintWriter和true同在
}
//用Socket输出流,反馈信息给客户端!
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("上传成功");
bufw.close();
s.close();
ss.close();
}
}