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

本文介绍了计算机网络的基础概念,包括网络协议的作用和TCP、UDP的特点。接着,详细阐述了Java中的TCP通信协议,强调了TCP的稳定性和三次握手过程。然后,讲解了JavaSocket模型,包括套接字和网络IO流的概念。最后,提供了客户端A和客户端B的简单TCP传输代码示例,展示了如何通过Socket进行数据交互。
摘要由CSDN通过智能技术生成

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

        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控制台中输入信息并回车

 

 

                 客户端B接收消息

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值