Java网络编程

文章介绍了网络编程的基本概念,包括如何通过IP和端口号定位网络中的程序,以及TCP和UDP两种主要的通信协议。TCP协议提供可靠的连接,通过三次握手建立连接,四次挥手断开连接,适合需要稳定传输的场景。UDP协议则不保证数据可靠性,但传输效率较高。文章还给出了简单的JavaTCP编程示例。
摘要由CSDN通过智能技术生成

网络编程:

借助于计算机网络,实现程序间进行信息/数据传输。

计算机网络:

利用通信设备和线路,把不同区域的计算机连接起来,最终实现数据传输。

Java语言是支持网络编程的,将网络的一些实现细节封装起来,对外提供一些类,程序员使用这些类进行编程即可。

网络编程的核心:

1、如何找到计算机网络中某台主机/程序(IP 和 端口号)

2、如何可靠高效的数据传输(通信协议)

网络模型:

OSI 7层模型

TCP/IP 模型 协议进行控制,IP定位

IP :是计算机地址

端口号:是计算机中程序的一个整数编号 有的程序启动时,计算机可以自动的分配,有的可以设置固定的端口号。 端口号不能重复。

通信协议:

在传输数据时,对如何传输进行控制,例如,传输什么内容、速率、出现问题如何解决等。

TCP协议:

Transmission Control Protocol 传输控制协议。

在发送数据前,都会先建立TCP连接,保证网络是否通畅。

采用”三次握手“机制:
在这里插入图片描述

​ 1、客户端------>服务器 请求连接

​ 2、服务器----->客户端 做出回应,确认收到请求

​ 3、客户端------>服务器 再次进行一个确认回应

这样客户端与服务器双方都确认了。

问题1 :2次握手是否可行? 答:服务器不能得到确认回应

问题2:4次握手是否可行? 答:产生多余回应

数据传输是可靠的,服务器连接不通会报错。

在数据传输完毕后,断开连接时,采用“四次挥手”机制:
在这里插入图片描述

​ 1、客户端------>服务器 发送断开请求

​ 2、服务器----->客户端 确认回复,发送必要数据

​ 3、服务器----->客户端 发送断开请求

​ 4、客户端------>服务器 确认回复

特点:传输可靠,效率相对较低

UDP协议:

User Datagram Protocol 用户数据报协议。

将数据源、数据、目标地址封装成一个个数据包/报,然后发送

发送是否成功不知道

特点:不可靠的。因为不需要建立连接,所以效率高。

TCP编程:

基于TCP协议控制的数据传输

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

        Scanner scanner = new Scanner(System.in);
        //创建服务器
        ServerSocket serverSocket = new ServerSocket(6666);
        System.out.println("服务器创建成功,等待客户端连接·····");
        //连接
        Socket accept = serverSocket.accept();
        System.out.println("客户端连接成功");


        //服务器接收
        InputStream inputStream = accept.getInputStream();
        DataInputStream dataInputStream = new DataInputStream(inputStream);
        String s = dataInputStream.readUTF();
        System.out.println(s);

        //服务器发送
        OutputStream outputStream = accept.getOutputStream();
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        System.out.println("服务器输入:");
        String ss = scanner.next();
        dataOutputStream.writeUTF(s);
        

        dataInputStream.close();
        dataOutputStream.close();
        accept.close();
    }


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

        Scanner scanner = new Scanner(System.in);
        //创建客户端
        Socket socket = new Socket("127.0.0.1", 6666);

        //客户端发送
        OutputStream outputStream = socket.getOutputStream();
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        System.out.println("客户端输入:");
        String s = scanner.next();
        dataOutputStream.writeUTF(s);


        //客户端接收
        InputStream inputStream = socket.getInputStream();
        DataInputStream dataInputStream = new DataInputStream(inputStream);
        String ss = dataInputStream.readUTF();
        System.out.println(s);


        dataOutputStream.close();
        dataInputStream.close();
        socket.close();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值