IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Java之网络编程 -> 正文阅读

[网络协议]Java之网络编程

Java之网络编程

网络模型

  • OSI参考模型
    将网络分成七层:应用层、表示层、会话层、传输层、网络层、数据链路层,物理层
  • TCP/IP参考模型
    将网络分成:应用层、传输层、网际层、主机至网络层

网络通讯要素

  • IP地址 InetAddress
    1.网络中设备的标识
    2.不易记忆,可用主机名
    3.本地回环地址:127.0.0.1 主机名:localhost
  • 端口号
    1.用于标识进程的逻辑地址,不同进程的标识
    2.有效端口:065535,其中01024系统使用或保留端口
  • 传输协议
    1.通讯的规则
    2.常见的协议:TCP,UDP
    UDP
    a.将数据及源和目的封装成数据包中,不需要建立连接
    b.每个数据报的大小限制在64k内
    c.因无连接,是不可靠协议
    d.不需要建立连接,速度快
    TCP
    a.建立连接,形成传输数据通道
    b.在连接中进行大数据传输
    c.通过三次握手完成连接,是可靠协议
    d.必须建立连接,速度稍慢
    三次握手
    a.第一次握手,建立连接,客户端发送syn包,到服务器,进入SYN_SENT状态,等待服务器确认
    b.第二次握手,服务器收到syn包,必须确认客户端的SYN,同时自己也发送一个SYN+ACK包,服务器进入SYN_RECV状态
    c.第三次握手,客户端收到服务器的SYN+ACK包,像服务器发送确认包ACK,此包发送完毕,客户端进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

Socket

  • Socket就是为了网络服务提供的一种机制
  • 通信的两端都有Socket
  • 网络通信其实就是Socket间的通信
  • 数据在两个Socket间通过IO传输
    UDP代码展示
// 发送端
class SendMessageTask implements Runnable {
    @Override
    public void run() {
        try {
            DatagramSocket datagramSocket = new DatagramSocket(Demo.CLIENT_PORT);
            byte[] infos = "hello world".getBytes();
            DatagramPacket datagramPacket = new DatagramPacket(infos, infos.length,
                    InetAddress.getByName(Demo.SERVER_HOST), Demo.SERVER_PORT);
            datagramSocket.send(datagramPacket);
            datagramSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// 接收端
class ReceiveMessageTask implements Runnable {
    @Override
    public void run() {
        try {
            DatagramSocket datagramSocket = new DatagramSocket(Demo.SERVER_PORT);
            byte[] bytes = new byte[1024];
            DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
            datagramSocket.receive(datagramPacket);
            // 获取ip地址和端口
            InetAddress inetAddress = datagramPacket.getAddress();
            String ip = inetAddress.getHostAddress();
            int port = datagramPacket.getPort();
            byte[] contentBytes = datagramPacket.getData();
            int contentLength = datagramPacket.getLength();
            String content = new String(contentBytes, 0, contentLength);
            System.out.println(ip + ":" + port + " ---> " + content);
            datagramSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

TCP代码展示

// 客户端
class ClientTask implements Runnable {
    @Override
    public void run() {
        try {
            Socket socket = new Socket(Demo.SERVER_HOST, Demo.SERVER_PORT);
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("hello world".getBytes());
            InputStream inputStream = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int length = inputStream.read(bytes);
            String content = new String(bytes, 0, length);
            System.out.println("客户端收到来自服务端的反馈 ---> " + Demo.SERVER_HOST + ":" + Demo.SERVER_PORT + " ----> " + content);
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// 服务端
class ServerTask implements Runnable {
    @Override
    public void run() {
        try {
            ServerSocket serverSocket = new ServerSocket(Demo.SERVER_PORT);
            Socket socket = serverSocket.accept();
            // 获取地址和端口
            String hostname = socket.getInetAddress().getHostAddress();
            int port = socket.getPort();
            // 获取内容
            InputStream inputStream = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int length = inputStream.read(bytes);
            String content = new String(bytes, 0, length);
            System.out.println("服务端收到来自客户端的消息 ---> " + hostname + ":" + port + " ----> " + content);
            // 反馈信息
            OutputStream outputStream = socket.getOutputStream();
            String responseContent = "hello java";
            outputStream.write(responseContent.getBytes());
            socket.close();
            serverSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:27:29  更:2021-09-27 14:28:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 2:00:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码