利用TCP协议实现客户端和服务端之间的文件上传

服务端代码如下:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

    public static void main(String[] args) {

        try {
            
            ServerSocket ss = new ServerSocket(8899);//创建一个服务端Socket用来监听 某个端口
            Socket c = ss.accept();//监听客户端连接,此处是线程阻塞的
            //会一直等待客户端连接,如果有客户端连接才会执行后面的代码
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/0.jpg"));//创建字节缓冲流把文件写入src目录
            BufferedInputStream bis = new BufferedInputStream(c.getInputStream());//创建字节输入流从客户端接收
            byte[] b = new byte[1024];//创建byte型数组存储
            int length = 0;
            while ((length = bis.read(b)) != -1) {//从输入流中读取数据的下一个字节并循环判断到最后一个字节
                bos.write(b, 0, length);//将byte数组写入缓冲流,从零开始到最后一个字节
            }
            ss.close();//socket这里可以用try(需要关闭的代码){ }方法实现关闭
            bos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

客户端代码如下:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;

import java.io.OutputStream;
import java.net.Socket;

public class TCPClient1 {

    public static void main(String[] args) {
        //客户端
        try (Socket s = new Socket("10.10.12.185", 6666);//新建一个Socket 并写入IP地址,端口号 和服务端建立连接 
                FileInputStream fis = new FileInputStream("C:\\Users\\HP\\Desktop\\0.jpg");//新建一个文件输入流读取文件
                BufferedInputStream bis = new BufferedInputStream(fis);//利用缓冲流,增加读写速度
                OutputStream os = s.getOutputStream();//创建输出流
                BufferedOutputStream bos = new BufferedOutputStream(os);) {//利用缓冲流,增加读写速度

            byte[] arr = new byte[1024];//创建byte数组
            int length = 0;//设置长度
            while ((length = bis.read(arr)) != -1) {//循环
                bos.write(arr, 0, length);//写入输出流
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

你可能感兴趣的:(利用TCP协议实现客户端和服务端之间的文件上传)