用java网络编程中的TCP方式上传文本文件及出现的小问题

时间:2022-08-11 10:15:56

  自己今天刚学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();
    }

}