美文网首页
socket通信—实现网络间的IO通信

socket通信—实现网络间的IO通信

作者: 小胖学编程 | 来源:发表于2020-12-16 10:21 被阅读0次

socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。多个TCP连接或者应用进程可能需要通过同一个TCP协议端口传输数据,为了区分不同的应用程序进程和连接,计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

1. socket通信的流程

socket通信过程.png

图片来源

  1. 服务端先初始化socket,然后和端口绑定(bind),对端口进行监听(listen)。调用accept进行阻塞,等待客户端连接。

  2. 客户端初始化一个socket,然后连接服务器(connect),如果连接成功,客户端可以和服务端建立连接。

  3. 客户端通过outputStream发送数据,服务端收到请求(inputStream去网络中读取数据)并处理请求,然后把回应的数据发送给客户端,客户端读取数据,最后关闭连接。

对应的JAVA代码

上文说到,socket可以实现数据传输的并发服务,我们可以定义多个客户端并发传输数据。

@Slf4j
public class SocketTest {
    private static Socket socket;

    public static void main(String[] args) throws Exception {
        new Thread(() -> {
            sendCommand("AAA");
        }).start();
        new Thread(() -> {
            sendCommand("BBB");
        }).start();
        new Thread(() -> {
            sendCommand("CCC");
        }).start();

    }

    public static void sendCommand(String message) {
        try {
            socket = new Socket("127.0.0.1", 4331);
            DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
            DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
            dataOutputStream.writeUTF(message);
            dataOutputStream.flush();
            String outMessage = dataInputStream.readUTF();
            System.out.println("发送的信息:" + message + ",接受到的信息:" + outMessage);
        } catch (Exception e) {
            log.error("", e);
        }
    }
}

服务端需要先启动,并且while循环去接受客户端的消息:

public class SocketService {
    private static ServerSocket server;

    public static void main(String[] args) throws Exception {
        server = new ServerSocket(4331);
        System.out.println("等待客户端呼叫");


        while (true) {
            //没有消息时,此处保持阻塞
            Socket socket = server.accept();
            //输出信息到网络中
            DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
            //接受信息到网络中
            DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
            String s = dataInputStream.readUTF();
            System.out.println(s);
            dataOutputStream.writeUTF(s + "-CCTV");
        }

    }
}

2. socket通信的原理

TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。

image.png

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

image.png

TCP及socket通信原理

Socket通信原理

相关文章

  • socket通信—实现网络间的IO通信

    socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。多个TCP连接或者应用进程可能...

  • Socket实现简易即时通讯

    Socket就是为网络服务提供的一种机制,网络通信其实就是Socket之间的通信,数据在两个Socket间通过IO...

  • socket

    socket介绍 socket是一种IPC机制,但是它不仅可以实现本机进程间的通信还可以实现不同网络中的进程间通信...

  • Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络...

  • 2021-09-25 网络编程(Socket)

    1.Socket就是为网络服务提供的一种机制2.通信的两端都有Socket3.网络通信其实就是Socket间的通信...

  • websocket(1)

    socket.io简述 1、基本介绍 socket.io是基于websocket技术,实现实时通信功能的技术。 简...

  • 5.0.3.Socket

    Socket(网络套接字)是网络编程提供的一种机制,通信的两端都要有socket,网络通信就是socket通信数据...

  • [转]Socket技术介绍

    socket编程是网络常用的编程,我们通过在网络中创建socket关键字来实现网络间的通信,通过收集大量的资料,通...

  • Socket学习

    socket是网络间进程通信的一种实现方式。 下图就是socket的原理图。 那么socket在哪里呢?又是服务于...

  • Java 网络编程基础 - TCP 与 UDP

    Socket(套接字)网络编程是在网络中实现两个进程间通信的一种方式,其中由 ip 和端口组成 Socket 的作...

网友评论

      本文标题:socket通信—实现网络间的IO通信

      本文链接:https://www.haomeiwen.com/subject/lklngktx.html