JavaSE高级之Socket入门(第二篇)

Socket

实现客户端向服务端发送数据或文件,服务端显示“我已经收到你的图片”,客户端显示图片已发送。

client

1. 创建Socket对象,构造方法中赋予ip地址与端口号。

2. 通过socket获取输出流,代表发送给服务端的数据流

3. 创建字节输入流存放发送的文件路径

4. 转化成二进制将其存放到字节数组中写出。

5. 关闭数据的输出,给服务器一个表示,才能让服务器终止读取数据,退出while循环

6. 客户端实现接受服务端的反馈,将数据打印到控制台。用socket接受服务端发送的数据流

7. 创建字节数组输出流,通过字节数组存放二进制文件将其写出。

server

1. 创建ServerSocket类,构造函数中指定其匹配的端口号

2. 调用accept()方法创建socket对象

3. 通过socket调用getInputStream()方法,代表客户端发给服务端的数据六

4 创建字节输出流对象,存放新文件的位置名称

5. 客户端向服务端发送反馈“我已经收到你的图片”,注意:这里必须再客户端调用shutdownOutput()方法,否则这里会一直读取客户端发来的数据不会退出whille循环

6. 服务端给客户端反馈,"iu图片已发送",是发送给客户端的数据。

具体代码如下:

@Test
    public void client() throws IOException {
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 7788);
        OutputStream outputStream = socket.getOutputStream(); 
        FileInputStream fileInputStream = new FileInputStream(new File("iu.jpg"));
        byte[] buffer1 = new byte[1024];
        int len1;
        while (-1 != (len1 = fileInputStream.read(buffer1))) {
            outputStream.write(buffer1,0,len1);
        }

        socket.shutdownOutput();

        
        InputStream inputStream = socket.getInputStream(); 
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[1024];
        int len2;
        while (-1 != (len2 = inputStream.read(buffer2))) {
            byteArrayOutputStream.write(buffer2,0,len2);
        }
        System.out.println(byteArrayOutputStream.toString());

        socket.close();
        outputStream.close();
        fileInputStream.close();
        byteArrayOutputStream.close();
    }

    @Test
    public void server() throws IOException {
        ServerSocket serverSocket = new ServerSocket(7788);
        Socket socket = serverSocket.accept();
        InputStream inputStream = socket.getInputStream(); 
        FileOutputStream fileOutputStream = new FileOutputStream("iloveiu.jpg");
        byte[] buffer = new byte[1024];
        int len;
        while (-1 != (len = inputStream.read(buffer))) { 
            fileOutputStream.write(buffer,0,len);
        }

        System.out.println("我已经收到你的图片");

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("Iu图片已发送".getBytes());


        serverSocket.close();
        socket.close();
        inputStream.close();
        fileOutputStream.close();
        outputStream.close();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值