Java 网络编程基础

这篇具有很好参考价值的文章主要介绍了Java 网络编程基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

什么是网络编程

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

网络编程基础知识

网络通讯流程

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

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

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

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

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

长连接和短连接

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

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

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

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

Socket

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

Java 网络编程基础,Java,java,网络,开发语言

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() {
            /*socket.getInputStream() 为客户端的输出流*/
            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://www.toymoban.com/news/detail-610991.html

到了这里,关于Java 网络编程基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java基础面试题04(网络编程)

    什么是网络编程?它的作用是什么? 网络编程是一种用于在计算机网络中进行数据交换和通信的编程技术。它涉及到使用网络协议和相关工具来实现程序之间的通信。网络编程的目标是允许不同设备或应用程序之间进行数据传输、共享资源和进行远程控制。 网络编程的作用

    2024年02月15日
    浏览(26)
  • 快速入门java网络编程基础------Nio

    哔哩哔哩黑马程序员 netty实战视频 NIO(New I/O)是Java中提供的一种基于通道和缓冲区的I/O(Input/Output)模型。它是相对于传统的IO(InputStream和OutputStream)模型而言的新型I/O模型。NIO的主要特点包括: 1.通道与缓冲区: 2.NIO引入了通道(Channel)和缓冲区(Buffer)的概念。通道

    2024年01月20日
    浏览(37)
  • 《Java SE》网络编程基础知识归纳。

    目录 一、网络基本介绍 1、什么是网络通信? 2、网络 3、IP地址 4、域名 5、网络通信协议 6、Socket 二、TCP网络通信编程  1、应用实例1(字节流) 2、应用实例2(字节流) 3、应用实例3(字符流) 4、netstat 指令 三、UDP网络通信编程  1、基本介绍 2、基本流程 3、应用实例  

    2024年01月20日
    浏览(39)
  • 【Java 基础篇】Java网络编程实战:P2P文件共享详解

    Java网络编程是现代软件开发中不可或缺的一部分,因为它允许不同计算机之间的数据传输和通信。在本篇博客中,我们将深入探讨Java中的P2P文件共享,包括什么是P2P文件共享、如何实现它以及一些相关的重要概念。 P2P(Peer-to-Peer)文件共享是一种分布式计算模型,其中每个

    2024年02月07日
    浏览(27)
  • Java-Java基础学习(2)-网络编程-TCP-UDP

    2.1. 通信协议 TCP、UDP对比 TCP 打电话 连接,稳定 三次握手,四次挥手 客户端、服务端 传输完成,释放连接,效率低 UDP 发短信 不连接,不稳定 客户端,服务端,没有明确的界限 不管有没有准备好,都可以发给你 导弹 DDOS:洪水供给!(饱和攻击) 2.2. Tcp上传测试 总结:

    2024年04月09日
    浏览(32)
  • 🔥🔥Java开发者的Python快速进修指南:网络编程及并发编程

    今天我们将对网络编程和多线程技术进行讲解,这两者的原理大家都已经了解了,因此我们主要关注的是它们的写法区别。虽然这些区别并不是非常明显,但我们之所以将网络编程和多线程一起讲解,是因为在学习Java的socket知识时,我们通常会将它们结合使用,以实现服务器

    2024年02月05日
    浏览(47)
  • 计算机网络技术与JAVA网络编程手写Socket聊天室-----JAVA入门基础教程-----计算机网络经典

    import java.io.*; import java.net.Socket; import java.util.Scanner; public class ChatClient { public static void main(String[] args) { try { Socket socket = new Socket(\\\"127.0.0.1\\\",9090); new Thread(new Runnable() { @Override public void run() { InputStream inputStream = null; while(true) { try { inputStream = socket.getInputStream(); } catch (IOException e)

    2024年02月15日
    浏览(43)
  • Java网络编程基础:TCP Socket套接字编程 IntAddress UDP等...

    目录 一,网络基础 1.IP地址 2.端口 3.TCP/UDP协议 4.网络编程开发模式  二,基于套接字的Java网络编程 1.Socket  2.InetAddress 三.基于TCP的Socket网络编程 1.单服务器端与单Socket客户端一次通讯 2.单服务器端接收多次通讯  3.TCP网络通讯补充 四,基于UDP的网络编程 1. DatagramSocket:收发

    2024年04月29日
    浏览(27)
  • Java面向对象程序开发——网络编程入门知识

    ​ C/S结构 :client/sever是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :browser/sever是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 Web应用系统开发的两种流行架构 两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一

    2024年02月12日
    浏览(30)
  • 计算机网络-基础编程实验(JAVA\Python3)

            通过本实验,学习采用Socket(套接字)设计简单的网络数据收发程序,理解应用数据包是如何通过传输层进行传送的。 学习套接字编程,完成以下的网络数据收发程序。 1.采用TCP进行数据发送的简单程序 2.采用UDP进行数据发送的简单程序 3.多线程/线程池对比 4.简

    2024年02月01日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包