7 TCP 传输文件

客户端 ,服务端:可以相互传输数据

package Internet;

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

// 管道流
public class Test07_Client {
    public static void main(String[] args) throws IOException {
        // 连接服务端
        Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),10086);
        // 客户端-->服务端
        // 输出流和 读取文件
        OutputStream os = socket.getOutputStream();
        FileInputStream fis = new FileInputStream(new File("alxy.jpg"));// 读入文件
        // 将文件传输出去,客户端-->服务端
        byte[] buffer = new byte[1024];
        int length;
        while ((length= fis.read(buffer))!=-1){ // 将文件读到缓冲区
            os.write(buffer,0,length);  // 写出去
        }
        // 通知服务端,我已经输出完了
        System.out.println("客户端-->服务端:传输");
        socket.shutdownOutput();

        // 再次传输  服务端-->客户端
        InputStream is = socket.getInputStream();  // 读进来
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); //将读进来的内容变成新的对象
        byte[] buffer2 =new byte[1024];
        int length2;
        while ((length2=is.read(buffer2))!=-1){
            baos.write(buffer2,0,length2);
        }
        /*        while ((length=is.read(buffer))!=-1){  // 更新buffer,不行?
            baos.write(buffer);
        }*/
        System.out.println(baos.toString());

        socket.shutdownInput();




        // 关闭
        os.close();
        fis.close();
        socket.close();

    }
}


/////////////////////////////////////////////////////////////
package Internet;

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

public class Test07_Server {
    public static void main(String[] args) throws IOException {
        // 创建服务端
        ServerSocket serverSocket = new ServerSocket(10086);
        Socket socket=serverSocket.accept(); // 等待连接
       // 客户端-->服务端
        InputStream is = socket.getInputStream(); // is读入os
        FileOutputStream fos = new FileOutputStream("beauty.jpg"); // 接收文件->将文件输出
        byte[] buffer = new byte[1024];
        int length;
        while ((length= is.read(buffer)) != -1){  // 缓冲区读取输入流
            fos.write(buffer);  // 将缓冲区写到文件
        }

        // 通知客户端,我已经接收完了
        System.out.println("客户端-->服务端:接收");
        socket.shutdownInput();

        // 再次传输  服务端-->客户端
        OutputStream os = socket.getOutputStream();
        os.write("服务端-->客户端: 接收".getBytes());
        System.out.println("服务端-->客户端:传输");
        socket.shutdownOutput();

        // 关闭
        is.close();
        fos.close();
        socket.close();
        serverSocket.close();
    }
}
posted @ 2023-09-09 15:51  被占用的小海海  阅读(5)  评论(0编辑  收藏  举报