用java网络编程中的TCP方式上传文本文件及出现的小问题
自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用。
首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文件给服务端,服务端接收数据并显示“上传成功”给客户端。
客户端:
1 import java.io.BufferedReader; 2 import java.io.FileReader; 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.PrintWriter; 6 import java.net.Socket; 7 8 public class UploadClient { 9 10 /** 11 * @param args 12 * @throws IOException 13 */ 14 public static void main(String[] args) throws IOException { 15 //1.创建客户端的Socket对象 16 Socket s=new Socket("192.168.1.127",10000); 17 18 //2.将文件放入缓冲区,并上传 19 BufferedReader bufr= 20 new BufferedReader(new FileReader("client.txt")); 21 22 //通过使用PrintWriter对字节流和字符流进行处理,接管流 23 PrintWriter out =new PrintWriter(s.getOutputStream(),true); 24 25 //开始读取,上传给服务端 26 String line=null; 27 while((line=bufr.readLine())!=null){ 28 out.println(line); 29 } 30 31 //在这里必须给一个用于结束的标志,要不然服务端会一直等待····· 32 out.println("over"); 33 34 //3.读取服务端返回的对象 35 BufferedReader bufrIn =new BufferedReader(new InputStreamReader(s.getInputStream())); 36 String str=bufrIn.readLine(); 37 System.out.println(str); 38 39 //4.关流 40 bufr.close(); 41 s.close(); 42 } 43 44 }
服务端:
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 UploadServer { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //1.建立服务端的socket对象 ServerSocket ss=new ServerSocket(10000); //2.接收服务端的数据 Socket s=ss.accept(); //将接受的数据放入流中 BufferedReader bufIn= new BufferedReader(new InputStreamReader(s.getInputStream())); //指定要写入得文件 BufferedWriter bufw=new BufferedWriter(new FileWriter("server.txt")); //开始读取 //缓冲区的默认大小为8k,一到8k则会自动刷新,若没有结束标志,则得到的文件大小一定是8的倍数 String line=null; while((line=bufIn.readLine())!=null){ if("over".equals(line)) break; bufw.write(line); bufw.newLine(); //自己写刷新 bufw.flush(); } //向客户端返回数据,用PrintWriter PrintWriter out =new PrintWriter(s.getOutputStream(),true); out.println("上传成功"); //关流 bufw.close(); //与客户端断开连接关服务端 s.close(); ss.close(); } }