广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java 网络编程基础
  • 210
分享到

Java 网络编程基础

java网络开发语言 2023-08-16 15:08:23 210人浏览 八月长安
摘要

文章目录 前言什么是网络编程网络编程基础知识网络通讯流程长连接和短连接Socket Java 网络编程总结 前言 一个网络请求、服务之间的调用都需要进行网络通讯,在日常开发时我们可能并不会关心我们的服务端是怎么接收到请求的、

前言

一个网络请求、服务之间的调用都需要进行网络通讯,在日常开发时我们可能并不会关心我们的服务端是怎么接收到请求的、调用别的服务是怎么调用的,都是直接使用现成的框架工具,比如,Tomcatdubbo、OkHttp等提供网络服务的框架。作为程序员,我们还是要知其然知其所以然。本文将介绍在 Java 中如何进行网络编程以及网络编程的基础知识。

什么是网络编程

网络编程是指利用网络协议和技术实现计算机应用程序之间的通信、数据传输、交换,如tcp/IP协议、HTTP协议、Socket编程等,像 Java、C、c++python 这些语言都提供了网络编程的api和库函数,可以便捷地进行网络应用程序的开发。

网络编程基础知识

网络通讯流程

网络通讯过程通常包括以下几个步骤:

  1. 建立连接:通讯双方在网络中建立连接,即在物理层和链路层上进行握手,确认通讯协议和传输参数。

  2. 数据传输:建立连接后,数据可以在通讯双方之间进行传输。数据传输过程中,需要进行分段、封装、逐层封装、加密和校验等。

  3. 数据接收:数据接收方需要先解析、解封装和验证传输数据的正确性,然后对数据进行处理,包括存储和响应等。

  4. 断开连接:在数据传输完成后,通讯双方需要在网络中断开连接,释放资源,并进行必要的后续操作。

长连接和短连接

长连接和短连接是指客户端和服务器端网络连接的不同方式。

长连接指在客户端和服务器端之间建立一条长期保持的连接。一旦建立连接后,客户端和服务器端就可以持续交换数据,而不需要每次发送请求都重新建立连接。长连接通常用于需要频繁交换数据的场合,如在线游戏、聊天室和实时视频等。

短连接指客户端和服务器端之间在完成一次请求后立即断开连接。每次发送请求都需要重新建立连接。短连接通常用于只需要偶尔交换数据的场合,如HTTP请求、电子邮件和浏览网页等。

长连接可以减少连接建立的开销,提高数据传输效率,但可能会浪费一定的网络资源。短连接则可以节省网络资源,但会增加连接建立的开销和数据传输的延迟。

Socket

所谓 Socket (套接字),就是对网络中不同主机上的应用进程之间进行双向通信的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。

在这里插入图片描述

Socket 接口把复杂的 TCP/IP 协议族隐藏在后面,对开发人员来讲,通过调用一组接口就可完成网络通信。

Java 网络编程

Java提供了一个强大的网络编程模型和丰富的API来实现网络应用程序,主要基于Socket编程,提供了 ServerSocket 和 Socket 两种Socket,分别用于实现服务器端和客户端。ServerSocket负责绑定IP地址,监听端口,Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。代码如下:

public class Server {    public static void main(String[] args) throws ioException {                ServerSocket serverSocket = new ServerSocket();                serverSocket.bind(new InetSocketAddress(10001));        System.out.println("Server start.......");        while(true){           //serverSocket.accept()时阻塞,直到接收到客户端的请求           new Thread(new ServerTask(serverSocket.accept())).start();        }    }    private static class ServerTask implements Runnable{        private Socket socket = null;        public ServerTask(Socket socket) {            this.socket = socket;        }        @Override        public void run() {                        try(                    ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());                    ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream())            ){    String msg = inputStream.readUTF();                System.out.println("Accept clinet message:"+msg);                outputStream.writeUTF("Hello,"+msg);                outputStream.flush();            }catch (Exception e){                e.printStackTrace();            }            finally {                try {                    socket.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}
public class Client {    public static void main(String[] args) throws IOException {           Socket socket = null;        //与服务端通信的输入输出流        ObjectOutputStream output = null;        ObjectInputStream input = null;        //服务器的通信地址        InetSocketAddress addr = new InetSocketAddress("127.0.0.1",10001);        try{            socket = new Socket();                        socket.connect(addr);            output = new ObjectOutputStream(socket.getOutputStream());            input = new ObjectInputStream(socket.getInputStream());                        output.writeUTF("i‘m Client");            output.flush();            //接收服务器的输出            System.out.println(input.readUTF());        }finally{            if (socket!=null) socket.close();            if (output!=null) output.close();            if (input!=null) input.close();        }    }}

以上代码是传统BIO通信模型:采用 BIO 通信模型的服务端,通常由一个独立的 Acceptor 线程负责监听客户端的连接、处理、响应,典型的一请求一应答模型。该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,线程数量快速膨胀,系统的性能将急剧下降,随着访问量的继续增大,系统最终就会宕机。

总结

对网络编程有所了解后,也就大概知道Tomcat、Dubbo这样的框架最基本的实现原理,拿 Tomcat 举例,无非就是作为服务端监听一个端口,当这个端口有请求时对参数进行接收处理,处理后响应给客户端。当然这种成熟的框架是非常复杂的,有很多细节要考虑,比如数据的序列化问题、性能问题、安全问题、稳定性、扩展性、可靠性等。

来源地址:https://blog.csdn.net/qq_28314431/article/details/131963053

--结束END--

本文标题: Java 网络编程基础

本文链接: https://www.lsjlt.com/news/371581.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 网络编程基础
    文章目录 前言什么是网络编程网络编程基础知识网络通讯流程长连接和短连接Socket Java 网络编程总结 前言 一个网络请求、服务之间的调用都需要进行网络通讯,在日常开发时我们可能并不会关心我们的服务端是怎么接收到请求的、...
    99+
    2023-08-16
    java 网络 开发语言
  • Java网络编程基础详解
    目录网络编程1.1 概述1.网络编程中有两个主要的问题2.网络编程中的三要素1.3、IP1.4、端口1.5、通信协议UDP协议TCP协议1.6、TCP模拟通信客户端服务器文件上传1....
    99+
    2022-11-12
  • Java网络编程基础用法详解
    目录Socket 编程ServerSocket 类的方法Socket 类的方法InetAddress 类的方法Socket 通讯实例网络编程是指编写运行在多个设备(计算机)的程序,这...
    99+
    2023-05-19
    Java 网络编程 Java 网络
  • 浅谈java网络编程基础知识
    这篇文章主要浅谈java网络编程基础知识,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。网络基础知识1、OSI分层模型和TCP/IP分层模型的对应关系这里对于7层模型不展开来讲,只选择跟这次系列...
    99+
    2023-05-30
    java ava
  • Python基础:网络编程socket基
    socket也叫套接字,是对各种协议的封装,实现收发数据。Python里socket工作过程:(图片来自网络)socket在Python中实际上是一个模块,实现发送和接收数据的功能。因为socket是一个类,所以只导入模块需要使用socke...
    99+
    2023-01-31
    网络编程 基础 Python
  • python编程之网络基础
    1 套接字是一种具有通讯端点概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须要建立套接字。 套接字起源于20世纪70年代,有时人们把套接字成为“伯克利套接字”或“BSD套接字”,期初,套接字被设计用在同一台主机上多个应用...
    99+
    2023-01-31
    基础 网络 python
  • Python基础:网络编程sockets
    socketserver此模块简化了socket的编写。    1、它有一个基类,定义了如何建立连接。BaseServer提供了服务类接口,BaseServer使用了select创建了多线程。BaseServer下面有四个类:TCPServ...
    99+
    2023-01-31
    网络编程 基础 Python
  • 《Python网络编程基础》笔记
                              python网络编程基础                           ================== Author: lujun9972 <luj...
    99+
    2023-01-31
    网络编程 基础 笔记
  • 详解python的网络编程基础
    目录一.什么是网络编程二.socket1.socket的基本语法2.与socket有关的一些函数服务端函数客户端函数公共函数三.程序需求服务端分析客户端分析四.代码升级加上通信循环&...
    99+
    2022-11-12
  • Netty网络编程零基础入门
    目录OSI七层网络模型Socket技术TCP协议Java语言创建socket应用http协议OSI七层网络模型 应用层:Http协议、文件服务器、邮件服务器 表示层:数据转换解决不同...
    99+
    2022-11-13
    Netty网络编程 Netty编程
  • 【100天精通Python】Day46:Python网络编程_网络编程基础与入门
    目录 专栏导读  1 网络编程的基础 2. 基本概念和协议 2.1 计算机网络基础 2.2 网络协议、IP地址、端口号 2.3  常见网络协议 3. 套接字编程 3.1 套接字的基本概念 3.2 套接字的基本操作 3.3 套接字通信模型和方...
    99+
    2023-09-06
    前端 python 网络编程
  • 网络基础入门(网络基础概念详解)
      本篇文章主要是对网络初学的概念进行解释,可以让你对网络有一个大概整体的认知。 文章目录 一、简单认识网络 1、1 什么是网络 1、2 网络分类  二、网络模型 2、1OSI七层模型 2、1、1 简单认识协议 2...
    99+
    2023-10-03
    网络
  • java基础学习笔记:一文带你搞懂网络编程
    1. 网络编程学习...
    99+
    2023-06-02
  • Linux系统编程中的网络编程基础是什么
    这篇文章主要为大家分析了Linux系统编程中的网络编程基础是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux系统编程中的网络编程基础是什么”的知...
    99+
    2023-06-28
  • python的网络编程基础知识有哪些
    这篇“python的网络编程基础知识有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python的网络编程基础知识有哪些...
    99+
    2023-06-26
  • 【Java】Java多线程编程基础
    文章目录 1. 进程与线程1.1 进程与线程的基本认识1.1.1 进程(Process)1.1.2 线程(Thread) 1.2 为什么会有线程1.2.1 以看视频为例 2. ...
    99+
    2023-10-03
    java python 开发语言
  • 网络基础(一)桥接网络
    网络基础知识 桥接网络 桥接网络是一种网络设计技术,其目的是将两个或多个网络段连接在一起,使它们在逻辑上表现为单个网络。这通过使用网络桥来实现,网络桥工作在数据链路层(第2层),只关心MAC地址,而不...
    99+
    2023-09-01
    网络
  • 如何理解Go语言基础之网络编程
    本篇内容主要讲解“如何理解Go语言基础之网络编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Go语言基础之网络编程”吧!socker编程我们所学的TC...
    99+
    2022-10-19
  • C#网络编程入门基础知识有哪些
    这篇文章主要介绍“C#网络编程入门基础知识有哪些”,在日常操作中,相信很多人在C#网络编程入门基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#网络编程入门基础知识有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • java基础编程案例
    java编程案例 案例一:飞机票查看优惠系统案例二:获取素数案例三:验证码模块案例四:数组元素的复制案例五:评委打分案例六:数字加密程序案例七:模拟双色球系统 案例一:飞机票查看优惠系统...
    99+
    2023-10-11
    java 算法 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作