【Java网络编程】Socket套接字

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 哈喽,大家好~我是你们的老朋友:保护小周ღ,本期为大家带来的是网络编程的前提概念 Socket 套接字,操作系统提供Socket 用于封装底层的协议细节和通信逻辑,使应用程序可以通过简单直观的API与网络进行交互。所以客观的角度讲基于Socket 套接字开发,就是网络编程。概念篇~~更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘

 

image.gif编辑

哈喽,大家好~我是你们的老朋友: 保护小周ღ,本期为大家带来的是网络编程的前提概念 Socket 套接字,操作系统提供Socket 用于封装底层的协议细节和通信逻辑,使应用程序可以通过简单直观的API与网络进行交互。所以客观的角度讲基于Socket 套接字开发,就是网络编程。概念篇~~更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘

一、网络编程的基本概念

网络编程是指编写能够在网络上传输数据的程序(进程)。这包括利用网络协议,如 TCP/IP 和 HTTP,开发应用程序,使其能够在不同的计算机之间进行通信和数据交换。

我们的每一个应用层程序都可以看作是一个进程,每个进程默认会创建一个线程运行,可以理解为 C/C++ 或 Java 中的main() 函数,main() 函数就可以认为是主线程,主执行流。

image.gif编辑

互联网的最大的意义在于资源共享,网络编程的意义在于它可以让不同计算机之间的数据交换和通信成为可能,将分布在不同地点的计算机和设备连接在一起,使它们能够进行数据传输、共享资源、等操作。只要是基于网络来传输数据的程序,都属于网络编程的范畴。

在日常生活中,我们联网实际上就是连接上了各大运营商的服务器(移动,联通等),我们的设备通过百度浏览器向百度服务器发出请求,例如搜索:美女的图片,百度服务器(应用端)就会分析这条请求,看看自己有没有美女图片,如果有,那百度服务器就会将美女图片响应给发出请求的设备。这些操作涉及到一些知识点——百度浏览器这个应用程序需要有能够在网络中发送信息的能力,发给谁:百度服务器,与其他设备具有连接的能力,接收能力:百度浏览器与百度服务器建立连接之后,需要能够真实有效的接收百度服务器发来的信息并解析,所以百度服务器也需要具有相同的功能。

进程A:通过编程来获取所欲网络资源

进程B:  通过编程来提供它人所需网络资源


1.1 发送端和接收端

在一次网络数据传输时:

发送端:是指在通讯中负责发送数据的设备或程序。发送端将要传输的数据转换为特定的信号或数据包,并通过网络或传输介质将其发送到接收端。在计算机网络通讯中,发送端可以是任何能够发送消息的设备,如电脑、手机、服务器等。

接收端:通常是指在数据传输中接收数据的设备或系统。在通信领域,接收端可以是计算机、手机、电视机、路由器等设备,用于接收来自发送端的信息并将其解码以便进行显示、存储或进一步处理。

收发端:是指具备发送和接收数据能力的设备或组件。在通信领域中,常常使用收发端作为通信链路两端的统称。收发端是通信系统中至关重要的组成部分,它们负责将信息从一个节点传递到另一个节点,是实现通信的基础。

发送端和接收端只是一次网络数据传输产生的数据流向的概念。

image.gif编辑


1.2 请求和响应

举个生活中的例子,张三给李四打个电话,打电话首先是找到李四的电话号码,然后点击拨通,李四这边手机提示张三老铁来电,点击接通并开口道:摩西摩西 ?,李四这个操作就可以视为在响应张三的请求,此时发送端就变为李四老铁,接收端就是张三老铁。

image.gif编辑

也好比去餐馆中恰饭,你给老板来一句,老板我想吃蛋炒饭——请求,老板回应一声,表示收到你的请求,然后迅速将饭抄好,再将饭给你之前,先打个招呼,客官你的饭好了:提供一份蛋炒饭——响应。


1.3 客户端和服务器

上文也提到,在我们日常生活中上网的过程就是访问其他各大运营商的服务器,首先在一个大的环境下入网(移动,联通),其次链接各个运营商的服务器,访问对应服务器中的资源。

客户端:尝试获取服务的一方的进程,称之为客户端。例如:使用百度浏览器访问百度的服务器,搜索美女图片,服务器表示可以没问题,我这边有很多,全给你,然后百度浏览器这个应用程序就会获取到许多的美女图片。

服务器:在网络数据传输的场景下,把提供服务的一方的进程,称为服务端。

image.gif编辑

对于服务端来说,一方面提供客户端想要获取的服务资源,另一方面提供客户端保存资源在服务端的功能。


二、Socket 套接字

Socket(套接字)是网络编程中的一个概念,它是通过网络进行通信的一种方式,由操作系统提供的用于网络通信的技术,Socket是一种抽象层,用于封装底层的协议细节和通信逻辑,使应用程序可以通过简单直观的API与网络进行交互。所以客观的角度讲基于Socket 套接字开发,就是网络编程。

API全称(AplicationProgrammingInterface),一般来说就是软件之间信息交互的桥梁,例如,qq提供账号验证的接口(API),微信提供微信支付的接口——给其他的应用程序使用,所以有些应用程序会提供使用 qq 登录,微信登录,微信支付什么的功能,当然别人使用这方面的功能是要给腾讯交钱的。

2.1 Socket 套接字功能分类

首先在真实的网络环境中,通信双方通信需要遵守标准的网络协议,网络协议约定了通信规范,协议之间按照功能分层,常见的就是 TCP / IP 五层网络模型:

image.gif编辑

每层协议主要的功能博主就不详细介绍了,感兴趣的朋友可以查看博主的另一篇博客:程序猿眼中的协议:TCP / IP 五层网络模型_保护小周ღ的博客-CSDN博客

协议分层管理,约定下层协议给上层协议提供服务,上层协议调用下层协议,不可以跨层级调用。

网络编程是站在应用层的角度开发的,所以传输层协议需要为应用层提供服务,应用层也只能直接跟传输层交互。

Socket(套接字)主要争对传输层协议划分为如下三类:

    • 面向字节流套接字:基于传输层 TCP 协议

    面向字节流套接字是一种网络传输方式,基于传输层TCP协议实现。它将数据视为无结构的字节流,并在数据传输过程中保证数据的可靠性。

    TCP 协议的特点

      1. 面向有连接 :传输数据之前,通信双方先建立可靠连接
      2. 可靠传输 : TCP 协议有超时重传的机制和确认应答机制,当发现连接没有问题,但数据没有成功传输的时候会重新发送数据。
      3. 面向字节流:字面意思,使用字节流传输
      4. 接收缓冲区,发送缓冲区:在进行网络数据通信时,用于存储待发送或已接收数据的缓冲区,有了缓冲区的概念,可以帮助协调发送方和接收方之间的数据传输速度,并最大限度地减少数据丢失或混乱的风险……
      5. 传输数据的大小不受限制:字节流,流式传输,前提是有连接。
      6. 全双工通信:通信双方都可以同时进行信息交互
        • 面向数据报套接字:基于传输层 UDP 协议

        面向数据报套接字是一种基于传输层 UDP协议的网络通信方式。它不提供可靠性保证和流量控制机制,但是具有较低的延迟和适合实时应用的特点。

        UDP 协议的特点

          1. 面向无连接:传输数据之前,通信双方不依赖于建立连接,只需要知道谁发给谁即可。
          2. 不可靠传输:只负责发送,不关注数据是否传输成功,没成功啥也不干。
          3. 面向数据报:使用 UDP 数据报的形式传输,数据报可以理解为数据是一块一块的传输。image.gif编辑
          4. 有缓存区的概念
          5. 数据传输大小受限制:UDP 数据报最大占 64k, 1k = 1024字节
          6. 全双工通信:通信双方都可以同时进行信息交互

          具体信息可以观看博主 UDP 协议的博文

            • 面向原始套接字:基于自定义传输层协议

            原始套接字:是一种对原始网络报文进行处理的套接字,主要用途有:

              • 发送自定义的IP数据包
              • 发送ICMP数据包
              • 网卡的侦听模式,监听网络上的数据包
              • 伪装IP地址
              • 自定位协议的实现

              到这里,网络编程中的Socket套接字的概念博主已经分享完了,希望对大家有所帮助,如有不妥之处欢迎批评指正。

              image.gif编辑

              本期收录于博主的专栏——JavaEE,适用于编程初学者,感兴趣的朋友们可以订阅,查看其它“JavaEE基础知识”。

              下期预告:Java使用Socket套接字基于UDP 协议实现客户端服务器通信。

              感谢每一个观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★*

              遇见你,所有的星星都落在我的头上……

              相关实践学习
              部署高可用架构
              本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
              Sqoop 企业级大数据迁移方案实战
              Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
              相关文章
              |
              2月前
              |
              存储 监控 安全
              单位网络监控软件:Java 技术驱动的高效网络监管体系构建
              在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
              72 11
              |
              3月前
              |
              Java 程序员
              JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
              在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
              84 9
              |
              3月前
              |
              人工智能 Java 物联网
              JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
              随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
              65 7
              |
              12天前
              |
              Java 物联网 定位技术
              Java socket获取gps定位
              通过Java Socket编程获取GPS定位信息可以实现实时的地理位置跟踪。本文介绍了如何搭建Socket服务器、解析GPS数据以及实现客户端发送GPS数据的流程。希望这篇文章能为开发者提供清晰的指导,帮助构建高效的GPS定位系统。
              27 7
              |
              3月前
              |
              网络协议 Java 物联网
              Java网络编程知识点
              Java网络编程知识点
              69 13
              |
              3月前
              |
              安全 Java API
              深入探索Java网络编程中的HttpURLConnection:从基础到进阶
              本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
              190 9
              |
              3月前
              |
              JSON 安全 算法
              JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
              在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
              109 9
              |
              3月前
              |
              数据采集 Java API
              java怎么设置代理ip:简单步骤,实现高效网络请求
              本文介绍了在Java中设置代理IP的方法,包括使用系统属性设置HTTP和HTTPS代理、在URL连接中设置代理、设置身份验证代理,以及使用第三方库如Apache HttpClient进行更复杂的代理配置。这些方法有助于提高网络请求的安全性和灵活性。
              101 0
              |
              2月前
              |
              SQL 安全 网络安全
              网络安全与信息安全:知识分享####
              【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
              78 17
              |
              2月前
              |
              存储 SQL 安全
              网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
              随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。