Java通信原理(1)——TCP/IP协议

一、计算机网络的基本概念

        1、计算机网络

                (1)、概念:计算机网络即通过通信线路相互连接,使其能够交换数据、共享资源、协同工作。

                (2)、组成:计算机网络由计算机、设备硬件、协议、服务组成一个局域网、广域网、互联网。

        2、网络协议

                (1)、目的:设计网络通信规则、标准、服务。

                (2)、内容:数据格式、传输效率、传输控制。

二、Java通信协议

        传输层协议模式

                TCP(传输控制协议):

                        TCP相对于UDP比较稳定的传输协议,这里存在三次握手,保证连接状态,同时有明确的客户端和服务端之分 TCP服务中需要服务器端先启动,需要监听指定端口,等待客户端连接。 客户端主动连接服务器,和服务器连接之后,才可以进行数据交互,服务器不能主动连接客户端的。简单来说TCP类似打电话的通信协议,必须保证双方都在线时才能传输数据。

                UDP(用户数据报协议):

                        UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一个台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。简单来说UDP类似发短信的过程,双方不必要都在线。

(本章主要围绕TCP展开)

三、Java Socket模型

        1、套接字        

  • 启动server socket,监听在本机某个端口是否有socket连接,若存在也会创建一个socket对象
  • 存在一对socket对象,通过从socket对象获取流信息,并进行数据传输

        2、网络IO流

  • 输入流:从对方向本方输入
  • 输出流:本方向对方输出

四、代码实现

        实现简单的TCP传输可以创建两个客户端

        1、客户端A

public class ASide {

    public static void main(String[] args) {
        try {
            //创建TCP的Socket对象并初始化目标端口
            ServerSocket socket = new ServerSocket(58888);
            //输出当前IP地址
            System.out.println("初始化完成"+socket.getInetAddress() + "");
            System.out.println("监听中");
            //当监听到有端口向A发送信息时接收数据
            Socket A = socket.accept();
            //输出连接地址
            System.out.println("当前连接为:"+A.getInetAddress());
    
            //信息发送
            //从控制台获取输入信息
            String message = new Scanner(System.in).next();
            //将输入信息转化为字节形式并保存在列表中
            byte [] data = message.getBytes();

            //新建输出流,开始向对方发送信息
            OutputStream os = A.getOutputStream();
            //传入需要发送的数据
            os.write(data);
            //刷新
            os.flush();
            //关闭服务,避免资源占用
            os.close();
            A.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

        2、客户端B

public class BSide {
    public static void main(String[] args) {
        //新建一个字节列表用于接收信息
        byte [] msg = new byte[2048];
        try {
            //初始化客户端B的Socket对象
            Socket b = new Socket("127.0.0.1" , 58888);
            System.out.println("B连接"+b.getLocalPort());
            //创建输入流用于接收信息
            InputStream insB = b.getInputStream();
            //将接收的信息存入列表中
            insB.read(msg);
            //将列表中的信息转换为字符串
            int len = msg.length;
            String newMsg = new String(msg , 0 , len);
            System.out.println(newMsg);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

        3、运行

                运行时先启动客户端A,并输入需要发送的内容,再启动客户端B

                A:

                B:

                客户端A控制台中输入信息并回车

 

 文章来源地址https://www.uudwc.com/A/dbxwg/

                 客户端B接收消息

 

原文地址:https://blog.csdn.net/qq_64037280/article/details/129346284

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年10月10日 20:18
新版本 2023 idea 修改运行内存教程
下一篇 2023年10月10日 22:18