Java中的网络编程

2023-10-27

目录

一.网络编程的概述

二.网络模型

三.网络模型三要素 

四.TCP协议与编程

4.1TCP协议的三次 握手模型

 4.2TCP协议的四次挥手

五.UDP协议

5.1UDP协议的概念

5.2UDP协议 的代码实现


一.网络编程的概述

网络编程是指使用计算机网络进行软件开发的一种方式。它涉及了利用网络传输数据、进行远程通信和实现分布式计算的技术和方法。

在网络编程中,开发人员可以利用各种编程语言和网络协议来实现网络应用程序的设计和开发。以下是网络编程的几个主要概述:

  1. 客户端-服务器模型:网络编程通常基于客户端-服务器模型。在这种模型中,有一个或多个服务器端应用程序提供服务,而客户端应用程序通过网络连接到服务器,请求服务并接收响应。服务器端负责处理客户端的请求并提供相应的功能。

  2. Socket编程:Socket是实现网络通信的编程接口,是网络编程的核心概念之一。通过Socket,开发人员可以创建连接、发送和接收数据,并管理网络连接。常见的Socket编程包括TCP Socket和UDP Socket,分别用于可靠传输和不可靠传输。

  3. 网络协议:网络编程需要遵循特定的网络协议,如TCP/IP协议。协议定义了数据传输的格式、通信规则和错误处理等细节,确保不同设备能够正确地进行通信。开发人员在网络编程中需要理解和使用相应的网络协议。

  4. 数据交换格式:在网络中传输的数据需要采用特定的格式进行编码和解码。常见的数据交换格式有文本格式(如JSON、XML)和二进制格式。开发人员需要根据需求选择适合的数据交换格式,以便发送方和接收方能够正确地处理数据。

  5. 并发与多线程:网络编程通常需要处理多个客户端同时连接并发送请求。为了实现并发处理,开发人员可以利用多线程或异步编程技术。这样可以充分利用计算机资源,提高系统的吞吐量和响应速度。

  6. 安全性与加密:网络应用程序往往需要保证数据的安全性和隐私性。开发人员可以使用加密算法和安全协议来对数据进行加密传输,并采取措施防止恶意攻击和非法访问。

  7. 分布式计算:网络编程也涉及到分布式计算的概念。通过将任务分发到不同的计算节点上,利用网络进行协作和通信,可以实现更强大的计算能力和可扩展性。

网络编程是现代软件开发中重要的一部分,它使得应用程序能够在不同设备之间进行通信和协作。通过合理地设计和实现网络编程,可以实现功能强大、高效可靠的网络应用程序。

二.网络模型

 网络传输接收的过程:

三.网络模型三要素 

网络通信的三要素是:IP地址、端口号和通信协议。

IP地址是指在网络中用于唯一标识一台设备的地址,它类似于我们日常生活中的门牌号码。IP地址可以被用来寻址和定位网络中的设备。

端口号是指在一台设备中被用来标识不同程序或服务的数字,它类似于我们日常生活中电话号码的分机号。在进行网络通信时,发送方和接收方都会通过端口号来区分不同的程序或服务。

通信协议是指在网络通信中设定的规则和标准,用来定义数据的传输方式和格式。常用的通信协议有TCP、UDP、HTTP、FTP等。通信协议是网络通信中不可或缺的标准化组成部分,它规定了数据在传输过程中的格式、序列、传输速率和传输方式等细节,以确保数据能够被正确传输和接收。

四.TCP协议与编程

4.1TCP协议的三次 握手模型

 4.2TCP协议的四次挥手

 

在Java中,可以使用java.net包提供的功能来实现TCP协议的代码。下面是一个简单的TCP客户端和服务器的代码示例:

TCP客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) {
        String serverIP = "127.0.0.1"; // 服务器IP地址
        int serverPort = 8888; // 服务器端口号

        try {
            Socket socket = new Socket(serverIP, serverPort);

            // 获取输入流和输出流
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

            // 发送数据
            String message = "Hello, server!";
            out.println(message);

            // 接收服务器响应
            String response = in.readLine();
            System.out.println("Server response: " + response);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

TCP服务器:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) {
        int serverPort = 8888; // 服务器监听端口号

        try {
            ServerSocket serverSocket = new ServerSocket(serverPort);
            System.out.println("Server started and listening on port " + serverPort);

            while (true) {
                // 接受客户端连接
                Socket clientSocket = serverSocket.accept();

                // 获取输入流和输出流
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

                // 读取客户端发送的数据
                String receivedMessage = in.readLine();
                System.out.println("Received message from client: " + receivedMessage);

                // 向客户端发送响应
                String response = "Hello, client!";
                out.println(response);

                // 关闭连接
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,TCP客户端通过Socket类与服务器建立连接,并通过输入输出流进行数据的发送和接收。TCP服务器通过ServerSocket类监听指定的端口,并在接受客户端连接后通过输入输出流进行数据的交互。

请注意,示例中的IP地址127.0.0.1代表本地回环地址,可以用来测试在同一台机器上运行的客户端和服务器。如果要连接远程服务器,请将serverIP变量设置为服务器的IP地址。

五.UDP协议

5.1UDP协议的概念

UDP(User Datagram Protocol)是一种面向无连接的传输层协议,它提供了一种简单的、无状态的数据传输服务。与TCP不同,UDP不使用握手和确认机制,也不保证可靠的数据传输,但它具有较低的开销和较小的延迟。

以下是UDP协议的一些关键概念:

  1. 无连接性:UDP是无连接的,发送端在发送数据前不需要和接收端进行握手或建立连接。每个UDP数据报都是独立的,没有之前或之后的关联。

  2. 不可靠性:UDP不提供任何数据重传机制或错误处理机制。一旦发送出去,数据报可能会丢失、乱序到达或重复到达,因此不适合对可靠性要求较高的应用。

  3. 高效性:由于UDP协议较为简单,不需要维护连接状态表等额外开销,因此具有较小的通信开销和较低的传输延迟。

  4. 数据报形式:UDP通过将应用层的数据封装成称为"数据报"的单位进行传输。每个UDP数据报包含源端口号、目标端口号、长度和校验和等字段。

  5. 广播和多播支持:UDP协议允许数据报进行广播和多播,使得一个发送端可以向多个接收端同时发送相同的数据。

UDP广泛应用于对实时性要求较高且对数据可靠性要求不高的应用场景,例如音频、视频、实时游戏等。由于UDP的简单性和低开销特点,它在网络中也被用作一些控制信息的传输,如DNS查询、NTP时间同步等。

然而,需要注意的是,由于UDP不提供可靠性保证,应用层在使用UDP时需要自行处理数据的可靠性问题,例如通过应用层的重传机制或错误校验来确保数据的完整性和正确性。

5.2UDP协议 的代码实现

以下是Java中使用UDP协议进行通信的简单示例:

UDP客户端:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPClient {
    public static void main(String[] args) {
        String serverIP = "127.0.0.1"; // 服务器IP地址
        int serverPort = 8888; // 服务器端口号

        try {
            DatagramSocket socket = new DatagramSocket();
            InetAddress serverAddress = InetAddress.getByName(serverIP);

            // 发送数据
            String message = "Hello, server!";
            byte[] sendData = message.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort);
            socket.send(sendPacket);

            // 接收服务器响应
            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            socket.receive(receivePacket);
            String response = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("Server response: " + response);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

UDP服务器:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer {
    public static void main(String[] args) {
        int serverPort = 8888; // 服务器监听端口号

        try {
            DatagramSocket socket = new DatagramSocket(serverPort);
            System.out.println("Server started and listening on port " + serverPort);

            while (true) {
                // 接收客户端数据
                byte[] receiveData = new byte[1024];
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                socket.receive(receivePacket);
                String receivedMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
                System.out.println("Received message from client: " + receivedMessage);

                // 向客户端发送响应
                String response = "Hello, client!";
                byte[] sendData = response.getBytes();
                DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length,
                        receivePacket.getAddress(), receivePacket.getPort());
                socket.send(sendPacket);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,UDP客户端通过DatagramSocket类创建一个套接字,并使用DatagramPacket类将数据封装成数据报进行发送和接收。UDP服务器也是使用DatagramSocket类创建套接字,通过循环不断接收客户端的数据报,并将响应发送回客户端。

请注意,示例中的IP地址127.0.0.1代表本地回环地址,可以用来测试在同一台机器上运行的客户端和服务器。如果要连接远程服务器,请将serverIP变量设置为服务器的IP地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中的网络编程 的相关文章

随机推荐

  • Spring+ quartz 之 多任务动态定时(任务中起任务)

    参见上一篇Spring quartz 多任务定时 执行 与cronExpression表达式 可以知道如何设置多个规则的定时任务 但有时需要客户自己设置指定的时间来启动新的任务处理不同的事情 实现方式 用户在前台自行维护任务列表和任务执行时
  • 小程序上线发布后图片不显示

    造成的原因和解决办法 图片的url里面有中文 图片路径中文会造成解析乱码 发布线上就更加解析会有问题 及时将图片路径转成数字或者英文标题 再同步线上更新 图片的HTTP应为小写的http以及图片的后缀为小写的 png或者 jpg 微信小程序
  • 个人对爬虫框架Scrapy的理解

    Scrapy是一个为了爬取网站数据 提取结构性数据而编写的应用框架 我们只需要实现少量代码 就能够快速的抓取的数据内容 Scrapy使用了Twisted一部网络框架来处理网络通讯 可以加快我们的下载速度 不用自己去实现异步框架 并且包含了各
  • python模拟(验证码)登录

    模拟 验证码 登录流程 1 验证码的识别 获取验证码图片的文字数据 2 对post请求进行发送 处理请求参数 3 对响应数据进行持久化存储 示例网站 https www nowapi com app account login 云打码平台
  • 全面了解 Nginx 主要应用场景(转)

    作者 RayeWang www raye wang 2017 02 24 quan mian liao jie nginxdao di neng zuo shi yao 前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情 由于
  • VBA下弹框打开excel文件并读取数据

    话不多说 直接上代码 Sub LoadExcelData Dim wkbk As Workbook 定义一个工作薄 Dim myFileName As String 定义要读取的文件路径 Dim dataRow As Integer 定义数
  • 小程序报错解决

    错误一 http localhost 3000 不在以下 request 合法域名列表中 点击详情勾选不校验https即可
  • mcu调试之日志格式化输出的一种方法

    简介 在日后的维护过程中也是很宝贵的东西 怎么能说删除就删除呢 这里提供日志格式化输出的一种方式 主要用于平时调试 那些调试信息是那么的宝贵 代码示例 include
  • 填充书架

    leetCode 1105 填充书架 附近的家居城促销 你买回了一直心仪的可调节书架 打算把自己的书都整理到新的书架上 你把要摆放的书books都整理好 叠成一摞 从上往下 第i本书的厚度为books i 0 高度为books i 1 按顺
  • 【OpenCV】 人脸识别

    目录 一 前言 二 人脸识别案例 实现步骤及完整代码 步骤1 灰度化处理 步骤2 将灰度图再次进行 行列压缩 步骤3 直方图均值化 步骤4 使用模型 对每一个像素点遍历 图像甄别 人脸识别案例 源码分享 结果测试 可对人脸框选识别 三 车辆
  • Oracle内存管理PGA详解

    当用户进程连接到数据库并创建一个对应的会话时 Oracle服务进程会为这个用户专门设置一个PGA区 用来存储这个用户会话的相关内容 当这个用户会话终止时 系统会自动释放这个PGA区所占用的内存 这个PGA区对于数据库的性能有比较大的影响 特
  • CCS:GEL文件

    gel文件的应用 GEL文件与CMD文件 GEL文件的功能同cmd的功能基本相同 用于初始化DSP 但它的功能比cmd的功能有所增强 GEL在CCS下有一个菜单 可以根据DSP的对象不同 设置不同的初始化程序 GEL 通用扩展语言 无类型语
  • 操作系统_05_调度算法(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 进程调度 调度算法的评价指标 CPU 利用率 确保 CPU 是始终匆
  • vue实现一个购物车全功能

    效果图 1 静态代码结构渲染 div class app container div class banner box img src http autumnfish cn static fruit jpg alt div div clas
  • SpringMVC注解式控制器的数据验证、类型转换及格式化

    7 1 简介 在编写可视化界面项目时 我们通常需要对数据进行类型转换 验证及格式化 一 在Spring3之前 我们使用如下架构进行类型转换 验证及格式化 流程 类型转换 首先调用PropertyEditor的setAsText String
  • win10计算机分盘怎么设置密码,Win10如何限制磁盘分区被访问 Win10自带磁盘加密功能BitLocker在哪里...

    Win10系统有EFS这个文件加密功能 也自带磁盘加密功能 能让保存在磁盘里的文件上锁 还能给U盘加锁 这个磁盘分区加密功能就是BitLocker驱动器加密 BitLocker驱动器加密是设备加锁工具 防止因为计算机物理丢失导致数据泄露 有
  • ES 查询语句总结(2)内嵌对象查询

    背景 今年写了一个数据中心的项目 其中有相当一部分的数据查询 用的是ES来做的 涉及到dsl的查询语句 从最开始的简单查询 到后面的复杂的查询 逐步掌握了ES的常用写法 现在总结一下 文章内的称呼 没有按照ES的官方称呼 例如sql那边的表
  • python爬虫四:xpath的安装使用以及lxml模块

    1 xpath的介绍 1 1基本概念 XPath XML Path Language 是一种XML的查询语言 他能在XML树状结构中寻找节点 XPath 用于在 XML 文档中通过元素和属性进行导航 xml是一种标记语法的文本格式 xpat
  • 未能找到类型或命名空间名称“XXXX”(是否缺少 using 指令或程序集引用?)

    ICode联盟 项目中 App Code 文件夹中的类的命名空间 在添加的页面的 using XXXX 时 提示 未能找到类型或命名空间名称 XXXX 是否缺少 using 指令或程序集引用 说明要引用的这个类文件的 生成操作 属性没有选择
  • Java中的网络编程

    目录 一 网络编程的概述 二 网络模型 三 网络模型三要素 四 TCP协议与编程 4 1TCP协议的三次 握手模型 4 2TCP协议的四次挥手 五 UDP协议 5 1UDP协议的概念 5 2UDP协议 的代码实现 一 网络编程的概述 网络编