Java第二十一章网络通信

一、网络程序设计基础

1、局域网与互联网

为了实现两台计算机的通信,必须用一个网络线路连接两台计算机,如下图所示。

2、网络协议

1.IP协议

IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

2.TCP与UDP协议

TCP和UDP协议是TCP/IP协议的核心。 TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。

定义:

在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol、UDP(用户数据报协议,User Data Protocol)是传输层最重要的两种协议,为上层用户提供级别的通信可靠性。

传输控制协议(TCP):TCP(传输控制协议)定义了两台计算机之间进行可靠的传输而交换的数据和确认信息的格式,以及计算机为了确保数据的正确到达而采取的措施。协议规定了TCP软件怎样识别给定计算机上的多个目的进程如何对分组重复这类差错进行恢复。协议还规定了两台计算机如何初始化一个TCP数据流传输以及如何结束这一传输。TCP最大的特点就是提供的是面向连接、可靠的字节流服务。

用户数据报协议(UDP):UDP(用户数据报协议)是一个简单的面向数据报的传输层协议。提供的是非面向连接的、不可靠的数据流传输。UDP不提供可靠性,也不提供报文到达确认、排序以及流量控制等功能。它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。因此报文可能会丢失、重复以及乱序等。但由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

3、端口与套接字

二、TCP程序

1、InetAddress类

例题:获取计算机的本机名与IP地址

2、ServerSocket类

3、TCP网络程序设计

明白了TCP程序工作的过程,就可以编写TCP 服务器程序了。在网络编程中,如果只要求客户机向服务器发送消息,不要求服务器向客户机发送消息,称为单向通信。客户机套接字和服务器套接字连接成功后,客户机通过输出流发送数据,服务器则通过输入流接收数据。下面是简单的单向通信的实例。

例题:创建TCP/IP协议服务器

运行服务器端程序,将输出提示信息,等待客户呼叫。下面再来看一下客户端程序。

编写客户端程序,将用户在文本框中输入的信息发送至服务器端,并将文本框中输入的信息显示在客户端的文本域中。

三、UDP程序

1、DatagramPacket类

2、DatagramSocket类

3、UDP网络程序设计

根据前面所讲的网络编程的基本知识以及 UDP 网络编程的特点,下面创建一个广播数据报程序。广播数据报是一项较新的技术,其原理类似于电台广播。广播电台需要在指定的波段和频率上广播信息,收听者也要将收音机调到指定的波段、频率,才可以收听广播内容。

例题:创建UDP协议广播电台程序

(1)广播主机程序不断地向外播出信息,代码如下:

(2)接收广播程序。单击"开始接收"按钮,系统开始接收主机播出的信息;单击"停止接收"按钮,系统停止接收广播主机播出的信息。代码如下:​

说明:发出广播和接收广播的主机地址必须位于同一个组内,地址范围为224.0.0.0~224.255.255.255,该地址并不代表某个特定主机的位置,加入同一个组的主机可以在某个端口上广播信息,也可以在某个端口上接收信息。

相关推荐
Seven975 分钟前
剑指offer-3、从尾到头打印链表
java
江小北18 分钟前
今天去面试了,遇到一个面试题,spring单例bean是线程安全的吗?
java·后端·spring
天天摸鱼的java工程师19 分钟前
设计一个多租户 SaaS 系统,如何实现租户数据隔离(数据库级别 / 表级别)与资源配额控制?
java·后端·面试
看她闹~1 小时前
javacv添加字幕 剧中显示
java·javacv·字幕
风象南2 小时前
Spring Boot 的 3 种动态 Bean 注入技巧
java·spring boot·后端
移动开发者1号2 小时前
Kotlinx序列化多平台兼容性详解
android·java·kotlin
东阳马生架构11 小时前
商品中心—6.商品考核系统的技术文档
java
晴空月明12 小时前
Java 内存模型与 Happens-Before 关系深度解析
java
皮皮林55115 小时前
SpringBoot 加载外部 Jar,实现功能按需扩展!
java·spring boot
rocksun15 小时前
认识Embabel:一个使用Java构建AI Agent的框架
java·人工智能