Java 总结6 网络编程

本文介绍了网络编程的基本概念,包括分层思想、ISO/OSI与TCP/IP模型的区别,重点阐述了Java中的InetAddress和Socket接口在实际应用中的使用。通过实例展示了如何在服务器和客户端间建立连接并交换数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

分层思想

将这样一个大而复杂的系统分解为若干个小而简单的子系统,然后再逐个加以处理 —— 分层

ISO / OSI 网络参考模型

OSI模型的7层:应用-表示-会话-传输-网络-数据链路-物理

TCP / IP 网络参考模型

一组用于实现网络互连的通信协议
协议的5层:应用-传输-网络-数据链路-物理(相比OSI,没有表示层和会话层)

  • Internet网络体系结构以TCP/IP为核心

TCP / IP网络一些基本概念

  • IP 地址
  • Port 端口号
  • Socket 套接字:用于通信的端点由Socket定义,Socket由IP地址和Port组成
  • TCP(传输控制协议)面向连接的保证可靠传输的协议
  • UDP(用户数据报协议):无连接的传输协议,不能保证绝对的安全可靠,但是简单、效率高
  • 域名:服务器地址
  • URL(统一资源定位器):Internet上某一资源的地址
    • 语法格式:<协议>://<主机号:端口号>/完整文件名/资源中的某个特定位置

Java提供的网络编程类

在这里插入图片描述

InetAddress(IP地址封装类)

  • 不能通过new来创建实例,需要利用静态方法获取
    • object = InetAddress.getByName("hostname");
    • object = InetAddress.getLocalHost();
    • object = InetAddress.getAllByName("hostname");

6.2 Socket 接口

通信的一般步骤

  • 在服务器端生成一个ServerSocket实例对象,并通过accept()方法随时监听客户端的连接请求
  • 当客户端需要连接时,相应地要生成一个Socket实例对象,并发出连接请求
  • 服务器端通过accept()方法接收到客户端的请求后,开辟一个接口与之进行连接,并生成所需的I/O数据流
  • 客户端和服务器端的通信都是通过一对InputStream和OutputStream进行的。通信结束后两端分别关闭对象的Socket接口
import java.io.*;
import java.net.Socket;

public class Client {  //客户端
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("202.102.144.106", 8080);
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();
        DataInputStream din = new DataInputStream(in);
        DataOutputStream dout = new DataOutputStream(out);
        
        for(int i = 0; i < 10; i++) {  //传输10个整数给客户端
            dout.writeInt((int) (Math.random() * 100) +1);
        }
        int max = din.readInt();  //接收最大值
        
		dout.close();  //关闭资源
        din.close();
        out.close();
        in.close();
        socket.close();
    }
}
import java.net.*;
import java.io.*;

public class Server {  //服务器端
    public static void main(String[] args) throws Exception {
        ServerSocket ss = new ServerSocket(5432);
        Socket socket = ss.accept();
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();
        DataInputStream din = new DataInputStream(in);
        DataOutputStream dout = new DataOutputStream(out);
        
        int max = 0;  
        for(int i = 0, tmp = 0; i < 10; i++) {
            max = Math.max(din.readInt(), max);  //接收10个整数,求其最大值
        }
        dout.writeInt(max);  //传输最大值给客户端

        dout.close();  //关闭资源
        din.close();
        out.close();
        in.close();
        socket.close();
        ss.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值