第二十一章——网络通信

一.网络程序设计基础

1.局域网与互联网

2.网络协议

        1.IP协议

IP是Internet Protocol的简称,是一种网络协议。

       1.1 TCP/IP层次结构

        2.TCP与UDP协议

TCP可保证数据从一端送至另一端时,能够确实送达,而且抵达的数据的排列顺序和送出时的顺序相同。因此,TCP协议适合可靠性要求比较高的场合。

3.端口与套接字

1.一台计算机只有单一的连接到网络的物理链接,所有的数据都通过此连接对内,对外送达特定的计算机,这就是端口。

2.网络程序的套接字用于将应用程序与端口连接起来。套接字是一个假想的连接装置,就像插座一样可以连接电器与电线。

二.TCP程序

1.InetAddress类

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

2.ServerSocket类

 

3.TCP网络程序设计

在网络编程中,如果只要求客户机向服务器发送信息,不要求服务器向客户机发送消息,称为单向通行。客户机套接字和服务器套接字连接成功后,客户机通过输出流发送数据,服务器则通过输入流接收数据。

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

 

三.UDP程序

1.UDP是网络信息传输的另一种形式。

2.UDP的基本模式如下:

        将数据打包,然后将数据包发往目的地。

        接收别人发来的数据包,然后查看数据包。

1.DatagramPacket类

1.DatagramPacket(byte[] buf, int length).

2.DatagramPacket(byte[] buf, int length,InetAddress,int port)

2.DatagramSocket类

1.DatagramSocket()

2.DatagramSocket(int port)

3.DatagramSocket(int port,InetAddress addr)

3.UDP网络程序设计

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


import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
import javax.swing.*;public class Receive extends JFrame implements Runnable, ActionListener {int port; // 端口InetAddress group = null; // 广播组地址MulticastSocket socket = null; // 多点广播套接字对象JButton inceBtn = new JButton("开始接收");JButton stopBtn = new JButton("停止接收");JTextArea inceAr = new JTextArea(10, 10); // 显示接收广播的文本域JTextArea inced = new JTextArea(10, 10);Thread thread;boolean stop = false; // 停止接受信息状态public Receive() {setTitle("广播数据报");setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);thread = new Thread(this);inceBtn.addActionListener(this); // 绑定按钮ince的单击事件stopBtn.addActionListener(this); // 绑定按钮stop的单击事件inceAr.setForeground(Color.blue); // 指定文本域中文字的颜色JPanel north = new JPanel(); // 创建Jpanel对象north.add(inceBtn); // 将按钮添加到面板north上north.add(stopBtn);add(north, BorderLayout.NORTH); // 将north放置在窗体的上部JPanel center = new JPanel(); // 创建面板对象centercenter.setLayout(new GridLayout(1, 2)); // 设置面板布局center.add(inceAr); // 将文本域添加到面板上center.add(inced);add(center, BorderLayout.CENTER); // 设置面板布局validate(); // 刷新port = 9898; // 设置端口号try {group = InetAddress.getByName("224.255.10.0"); // 指定接收地址socket = new MulticastSocket(port); // 绑定多点广播套接字socket.joinGroup(group); // 加入广播组} catch (IOException e) {e.printStackTrace(); // 输出异常信息}setBounds(100, 50, 360, 380); // 设置布局setVisible(true); // 将窗体设置为显示状态}public void run() { // run()方法while (!stop) {byte data[] = new byte[1024]; // 创建缓存字节数组DatagramPacket packet = null;packet = new DatagramPacket(data, data.length, group, port); // 待接收的数据包try {socket.receive(packet); // 接收数据包String message = new String(packet.getData(), 0, packet.getLength()); // 获取数据包中的内容inceAr.setText("正在接收的内容:\n" + message); // 将接收内容显示在文本域中inced.append(message + "\n"); // 每条信息为一行} catch (IOException e) {e.printStackTrace(); // 输出异常信息}}}public void actionPerformed(ActionEvent e) { // 单击事件if (e.getSource() == inceBtn) { // 单击按钮ince触发的事件inceBtn.setBackground(Color.red); // 设置按钮颜色stopBtn.setBackground(Color.yellow);if (!(thread.isAlive())) { // 如线程不处于“新建状态”thread = new Thread(this); // 实例化Thread对象}thread.start(); // 启动线程stop = false; // 开始接受信息}if (e.getSource() == stopBtn) { // 单击按钮stop触发的事件inceBtn.setBackground(Color.yellow); // 设置按钮颜色stopBtn.setBackground(Color.red);stop = true; // 停止接受信息}}public static void main(String[] args) {Receive rec = new Receive();rec.setSize(460, 200);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/205262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设备间的指令通信

指令通信的概念 要进行设备和设备之间的交流就需要通过串口发送数据进行交流 而串口发送简单的数据只需要传输介质 但是要发送复杂的数据就需要介质和传输的规则了 三种应用场景 比如在上位机和mcu之间 通过上位机管理控制器 从而控制电池 单片机和单片机之间 用户输入数据到…

HTTPS加密协议:保护你的隐私与安全的铠甲

在当今数字时代,隐私和安全保护变得至关重要。而HTTPS加密协议作为互联网通信的保护铠甲,扮演着重要角色。无论你是网站开发者还是普通用户,了解HTTPS加密协议的工作原理和技术细节都是至关重要的。本篇博文将带你深入探索HTTPS加密协议&…

国产麒麟操作系统部署记录

前提:部署项目首先要安装各种软件,在内网环境下无法在线下载。 思路:首先部署一台能上网的系统,在此系统下只下载包,然后传到另一台内网系统下进行安装; 1、最开始yum未安装,因此需要先安装yu…

C语言中的动态内存管理

在C语言中,动态内存管理是通过一系列的标准库函数来实现的,这些函数包括malloc, free, calloc 和 realloc。它们允许程序在运行时动态地分配和释放内存,这是管理复杂数据结构(如链表、树等)时非常有用的功能。 为什么…

硬件基础:运放

理想运算放大器 理想运算放大器放大倍数无穷大;输入端阻抗无穷大,所以输入端电流为0;输出电压和负载无关,不管负载怎么变化,输出电压都是固定的。 还有个就是输出阻抗为0; 输出阻抗越小,输出时就…

Avalonia中如何实现文件拖拽上传

前言 前面我们讲了在Avalonia中如何将View事件映射到ViewModel层感兴趣的读者可以看一下,本章我们将讲一下在Avalonia框架下如何实现文件和文字的拖拽到指定区域进行处理和上传。 先看效果 界面设计比较简单,还是在前一张的基础上加了一个指定区域&…

基于springboot + vue的社区医院信息系统

qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件&#xf…

leetcode 622. 设计循环链表

这道题讲了两种方法,第一个代码是用数组实现的,第二个是用链表实现的,希望对你们有帮助 (最好在VS自己测试一遍,再放到 leetcode上哦) 下面的是主函数(作参考),静下心来…

Ubuntu安装向日葵【远程控制】

文章目录 引言下载向日葵安装向日葵运行向日葵卸载向日葵参考资料 引言 向日葵是一款非常好用的远程控制软件。这一篇博文介绍了如何在 Ubuntu Linux系统 中安装贝瑞向日葵。🏃💥💥💥❗️ 下载向日葵 向日葵官网: https://sunl…

动态规划学习——最长回文子序列,让字符串变成回文串的最小插入次数

一,最长回文串 1.题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入&…

【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)三种strlen模拟实现

🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…

煤矿电力监控系统

煤矿电力监控系统是一种用于煤矿电力系统的监控解决方案。该系统在重点煤矿的矿井变电站、主运输、主通风、主排水、主副提升等重要设备上加装智能用电融合终端,实时监测煤矿重要设备的电流、电压、负载等主要数据变化。为管理人员提供实时监测、报表管理、告警中心…

Centos7中的mysql环境安装以及卸载【Linux】

Linux中的mysql环境安装【Linux】 一. 检测mysql和mariadb是否存在二. 安装mysql2.1查看自身系统版本2.2 查看yum源2.3 选择yum源头2.4 安装yum源2.5 安装mysql2.6 启动mysql服务2.7 首次登录mysql 三. 卸载mysql3.1 关闭mysql服务3.2 查找并删除组件服务3.2.1 查找组件服务3.2…

Python 是一种对编程初学者友好的语言吗?

是的。 从过程式、静态类型的编程语言例如 Pascal, C 或者 C 以及 Java 的某一子集开始引导学生入门仍然是常见的做法。 但以 Python 作为第一种编程语言进行学习对学生可能更有利。Python 具有非常简单和一致的语法和庞大的标准库,而且最重要的是,在编…

漏洞复现-速达软件全系产品存在任意文件上传漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

阿里年薪50w和5w都是如何进行需求分析,过来围观!

工作中难免会遇到并不“完美”的需求文档,比如牵一发而动全身却不清晰的交互逻辑、子条目频繁的变更、交流缺失导致的歧义等,都会让测试在项目推进中手足无措。 一份好的需求文档,不止能够加速开发和测试的脚步,还能够提前发现风…

C/C++---------------LeetCode第278. 第一个错误的版本

第一个错误的版本 题目及要求二分查找 题目及要求 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 假设你…

【尘缘送书第五期】Java程序员:学习与使用多线程

目录 1 多线程对于Java的意义2 为什么Java工程师必须掌握多线程3 Java多线程使用方式4 如何学好Java多线程5 参与方式 摘要:互联网的每一个角落,无论是大型电商平台的秒杀活动,社交平台的实时消息推送,还是在线视频平台的流量洪峰…

软件工程-(可行性分析、需求分析)

目录 一.可行性研究 1.1定义 1.2项目背景 1.3三方面研究目标系统的可行性 1.3.1技术可行性分析 1.3.2 经济可行性分析 1.3.3 市场可行性分析 1.4. 数据流图 数据字典(DD) 1.5风险评估 1.6结论与建议 二、需求分析 引言 项目概述 利益相关者分析…

Unity中Batching优化的GPU实例化(3)

文章目录 前言一、UNITY_SETUP_INSTANCE_ID(v);二、在UnityInstancing.cginc文件中,看一下Unity这句话做了什么1、使用了该 .cginc 后,会自动预定义该函数2、需要满足GPU实例化条件,才会执行对应语句3、满足GPU实例化后,主要执行的…