TCP文件传输

网络协议里面有个FTP(文件传输协议),专门用于传输文件。但今天我们用Socke直接实现客户端与服务器端的文件传输,只需要在上次的Socke通讯中稍作改变,就可以达到文件传输的目的。

步骤

1.创建服务器端

package FileSocket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        File file=new File("E:\\Client.java");//保存文件的绝对路径
        ServerSocket ss=new ServerSocket(6666);//创建客户端 并指定端口号

        //服务器开启监听
        Socket socket=ss.accept();

        InputStream is=socket.getInputStream();  //得到socket自带的输入流
        OutputStream os=socket.getOutputStream();//得到socket自带的输出流

        BufferedReader br=new BufferedReader(new InputStreamReader(is));//输入缓存流  用于接收客户端的数据
        PrintWriter pw=new PrintWriter(new FileWriter(file),true);//将缓存中的数据 打印(输出)到文件中
        String temp=null;
        while ((temp=br.readLine())!=null){//读
            pw.println(temp);//写
            pw.flush();//刷新
        }
        System.out.println("接受成功!");
        br.close();//关闭
        pw.close();
        ss.close();
        socket.close();
    }
}

创建服务器端,通过Socket将客户端传来的数据放入(服务器端)Buffer缓存流中,然后将缓存流中的数据写到文件中(边读边写)。

2.创建客户端

package FileSocket;

import java.io.*;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        File file=new File("src/FileSocket/Client.java");//要传送的文件路径(相对路径)
        Socket socket=new Socket("localhost",6666);//指定客户端的 IP地址 和端口号

        InputStream is=socket.getInputStream();
        OutputStream os=socket.getOutputStream();

        BufferedReader br=new BufferedReader(new FileReader(file));//用于读取文件中的数据
        PrintWriter pw=new PrintWriter(os,true);//将文件传送到服务器端
        String temp=null;
        while ((temp=br.readLine())!=null){//读
            pw.println(temp);//写(通过Socket写入到对方)
            pw.flush();
        }
        System.out.println(file.getName()+"文件以传送!");
        br.close();//关闭
        pw.close();
        socket.close();
    }
}

创建客户端,将文件读到(客户端)Buffer缓存中,然后将缓存中的数据通过Socket传输到服务器端。

3.先开启服务器端,再开启客户端

这时,你会E盘下面看见Client.java文件,也就是你项目客户端里面的代码。

总结 

在我们传输文件的时候,就类似与通过IO流实现文件的拷贝,只是加上了Socket。客户端先将文件读到内存(缓存区),然后将缓存区的数据通过Socket传到服务器端。服务器端将来自客户端的数据读到缓冲区,然后将缓冲区的数据写到文件中。这个过程中,客户端和服务器都进行着读写操作,只是读写方向不同。

PS:上文中提到的缓存区并不是同一个缓存区,分别是客户端和服务器端各有的缓存区。


       每日鸡汤:有选择,就会有后悔。所以不需要后悔!


Over!

你可能感兴趣的:(网络编程)