当前位置:   article > 正文

Java:TCP 通信方法(基本发送 + 接收)并 实现文件传输且反馈_tcp发指令拿到回传

tcp发指令拿到回传

TCP 通信编程

TCP:是一种可靠的网络协议,再通信两端都建立一个Socket对象。
通信之前要保证连接已经建立。
通过Socket产生IO流进行通信。

创建对象时,会连接服务器,连接不上,会报错。
所以,先运行服务端,再运行发送端。

具体过程,注释写的很清楚了。

发送数据

package demo1;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class Client {
    public static void main(String[] args) throws IOException {

        // 创建连接通道
        Socket socket = new Socket("127.0.0.1", 1000);

        // 通过通道获取输出流
        OutputStream os = socket.getOutputStream();

        // 输出内容
        os.write("你好阿".getBytes());

        // 释放资源
        os.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

接收数据

package demo1;

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

public class Server {
    public static void main(String[] args) throws IOException {

        // 创建对象接收
        ServerSocket ss = new ServerSocket(1000);

        // 获取连接的通道
        Socket socket = ss.accept();

        // 根据通道获得输入流
        InputStream is = socket.getInputStream();

        // 字节流 转换为 字符流,再包装成缓冲字符流,不出现乱码,并 提高效率
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        // 读入
        String line;
        while ((line = br.readLine()) != null) {
            System.out.print(line);
        }

        // 释放资源
        socket.close();
        ss.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

传输文件 并 回馈

Client:

package demo3;

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

public class Client {
    public static void main(String[] args) throws IOException {

        // 建立连接
        Socket socket = new Socket("127.0.0.1", 1000);

        // 创建缓冲输入字节流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("start/img.jpg"));

        // 创建输出流
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());

        // 读入文件并传输
        byte[] bytes = new byte[4096];
        int len;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }

        // 写出结束标记
        socket.shutdownOutput();

        // 获取服务器回馈,读入,字节流转字符流,在转缓冲流
        BufferedReader br= new BufferedReader(new InputStreamReader(socket.getInputStream()));

        String line;
        line = br.readLine();
        System.out.println(line);

        // 释放资源
        socket.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

Server:

package demo3;

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

public class Server {
    public static void main(String[] args) throws IOException {

        // 创建对象
        ServerSocket ss = new ServerSocket(1000);

        // 接收连接
        Socket socket = ss.accept();

        // 读取数据,并保存到本地
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("target/b.jpg"));

        byte[] bytes = new byte[4096];
        int len;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }

        // 写回数据
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write("上传成功");
        bw.flush();

        // 释放资源
        socket.close();
        ss.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

运行结果:回馈和传输成功
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/470578
推荐阅读
相关标签
  

闽ICP备14008679号