当前位置: 首页 > news >正文

4.网络编程

1、目的

  • 传播交流信息
  • TCP:打电话
  • UDP:发短信

2、通信协议:

  • http
  • TCP/IP簇:三次握手(aba),四次挥手(abba)
  • https

3、IP与端口

1.IP地址类:InetAddress、InetSocketAddress
InetAddress inetAddress1 = InetAddress.getLocalHost();
InetAddress inetAddress2 = InetAddress.getByName("");
inetAddress1.getHostName();		//计算机名
inetAddress2.getHostAddress();	//IP地址
2.端口
  • 单个协议下,端口号不能冲突

  • 公有端口0-1023

    • HTTP:80
    • HTTPS:443
    • FTP:21
    • Telent:23
  • 程序注册端口:1024-49151

    • MySQL:3306
    • ORACLE:1521
  • 端口查看的dos命令:

    netstat -ano					#查看所有端口
    netstat -ano |findstr 1521		#查看1521这个端口
    

4、UDP编程实例

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//使用UDP通信实现接收多条消息,并可以同时接收多个客户端的消息
public class ReceiveDemo02 {public static void main(String[] args) throws IOException {System.out.println("----服务端启动----");//创建接收端的Socket对象,并配置监听端口,端口10000与发送端dp里配置的端口相同DatagramSocket socket = new DatagramSocket(10000);//创建数据包对象,配置接收数组、数组大小DatagramPacket dp = new DatagramPacket(new byte[1024], 1024);while (true) {//receive会进行线程阻塞socket.receive(dp);//打印接收的数据,对dp.getData()进行一个实际数据大小的截位System.out.println("收到来自" + dp.getAddress().getHostAddress() + "的消息:" + new String(dp.getData(), 0, dp.getLength()));}//释放资源//socket.close();}
}
import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
//使用UDP通信实现发多条消息
public class SendDemo02 {public static void main(String[] args) throws IOException {System.out.println("----客户端启动----");Scanner scanner = new Scanner(System.in);//创建发送端的Socket对象,系统会随机分配一个端口号DatagramSocket socket = new DatagramSocket();while (true){System.out.println("请输入要发送的内容:");String next = scanner.next();if(next.equals("exit")){//释放资源socket.close();return;}else {//定义存放数据的数组byte[] bytes = next.getBytes(StandardCharsets.UTF_8);//创建数据包对象,配置发送数据、数据长度、对方IP、对方端口DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"), 10000);//发送数据socket.send(dp);}}}
}

5、TCP编程实例

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
//客户端多发消息
public class ClientDemo04 {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);//创建Socket,配置服务端IP与端口Socket socket = new Socket("127.0.0.1", 10012);//调用socket.getOutputStream()获取输出流,并用DataOutputStream进行包装DataOutputStream dos = new DataOutputStream(socket.getOutputStream());while (true){System.out.println("请输入要发送的数据:");String next = scanner.next();if(next.equals("exit")){//关闭流dos.close();socket.close();return;}else {//发送数据dos.writeUTF(next);}}}
}
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
//目标:掌握利用线程池优化tcp服务端的方式
public class ServerDemo04 {public static void main(String[] args) throws IOException {//创建ServerSocket对象,配置监听端口ServerSocket serverSocket = new ServerSocket(10012);//创建线程池final ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(3, 5, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(10), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());System.out.println("服务端启动成功");while (true) {//调用serverSocket.accept();,阻塞线程,等待客户端连接Socket socket = serverSocket.accept();System.out.println(socket.getInetAddress().getHostAddress() + ":" + socket.getPort() + "连接成功");//新建线程处理消息接收Thread thread = new Thread(() -> {//获取socket的流数据,并用DataInputStream进行封装try (DataInputStream dis = new DataInputStream(socket.getInputStream())) {while (true) {//打印信息,dis.readUTF()阻塞线程,等待客户端发送消息System.out.println("收到来自" + socket.getInetAddress().getHostAddress() + ":" + socket.getPort() + "的数据: " + dis.readUTF());}} catch (Exception e) {//当客户端意外断开时,会出现异常,在此进行手动处理System.out.println(socket.getInetAddress().getHostAddress() + ":" + socket.getPort() + " 断开连接");}}, socket.getInetAddress().getHostName());//将线程添加到线程池,线程池会自己启动线程,不需要单独调用start()poolExecutor.execute(thread);/*//关闭流dis.close();socket.close();serverSocket.close();*/}}
}

相关文章:

4.网络编程

1、目的 传播交流信息TCP&#xff1a;打电话UDP&#xff1a;发短信 2、通信协议&#xff1a; httpTCP/IP簇&#xff1a;三次握手&#xff08;aba&#xff09;&#xff0c;四次挥手(abba)https 3、IP与端口 1.IP地址类&#xff1a;InetAddress、InetSocketAddress InetAdd…...

OpenCV GUI常用函数详解

在OpenCV的High_level GUI模组中有很多GUI函数&#xff0c;下面介绍几个常用的函数。 图像显示窗口相关函数 生成图像显示窗口函数nameWindow() nameWindow()函数的原型如下&#xff1a; 函数用以创建一个给定名的图像显示窗口&#xff08;后面简单叫做图像窗口&#xff09;…...

Tuxera NTFS for Mac破解版下载 Tuxera NTFS for Mac2023激活码 mac电脑ntfs磁盘软件

Tuxera NTFS for Mac是一款优秀的Mac系统完全读写软件&#xff0c;提供Fat32、NTFS、Exfat、mac os扩展格式的转换&#xff0c;稳定性好&#xff0c;传输速度极快。Tuxera NTFS for Mac功能丰富&#xff0c;能修复NTFS卷、创建NTFS磁盘映像、创建NTFS分区等等。同时软件支持所有…...

oceanbase(ob)基于备份集搭建备租户方式

一、搭建备租户方式&#xff08;基于备份的方式&#xff09; 注意事项&#xff1a;要有一个源端OB集群和目标端OB集群。 1、新建主租户&#xff08;如果原来有主租户可是省略&#xff09; #创建unit create resource unit ut_2c2g max_cpu2, memory_size2G, max_iops10000,l…...

Javase复习day21算法、arrays、Lamdba表达式

常见算法 查找算法 基本查找 package search;public class BasicSearchDemo1 {public static void main(String[] args) {//基本算法&#xff08;顺序查找&#xff09;int[] arr {131,23,57,37,95,48,57,43};System.out.println(basicSearch(arr, 43));}public static boo…...

移动硬盘无法读取?别慌!这些方法助你恢复数据!

在我们的日常工作和生活中&#xff0c;移动硬盘作为重要的数据存储工具&#xff0c;承载着珍贵资料。然而&#xff0c;移动硬盘无法被电脑读取的情况时有发生&#xff0c;令人焦急。别慌&#xff0c;下面为大家详细介绍恢复移动硬盘数据的有效方法。 一、检查硬件连接和驱动问题…...

Java集合面试(上)

Java集合面试(上) 集合概述 Java 集合&#xff0c;也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b;另一个是 Map 接口&#xff0c;主要用于存放键值对 说说List&#xff0c;Set,Queue&#…...

Python画笔案例-046 绘制小红伞

1、绘制小红伞 通过 python 的turtle 库绘制 小红伞&#xff0c;如下图&#xff1a; 2、实现代码 绘制 小红伞&#xff0c;以下为实现代码&#xff1a; """小红伞.py """ import turtledef draw_pattern():"""画填充圆弧"&…...

使用 .NET 6 构建跨平台 Worker Service 服务:跨越平台的 C# 服务开发——解决Windows服务跨平台问题

现代软件开发中&#xff0c;构建跨平台的应用程序变得愈加重要。C# 和 .NET 6 的出现使得在 Windows、Linux 和 macOS 上创建背景服务变得简单而高效。在本指南中&#xff0c;我们将通过创建一个使用 .NET 6 的 Worker Service 来展示如何实现跨平台后台服务。 项目概述 我们…...

terminator-gnome

gnome import os#启动节点指令变量 stere"ros2 launch stereo_c start.py" utils"ros2 launch task utils.launch.py" #tab标题 stere_title"stere_driver" utils_title"utils"#一个终端界面打开5个tab cmd1f"gnome-terminal --…...

7.测试用例设计方法 + Bug

一、正交实验法 1.使用场景 因果关系比较庞大的情况下&#xff0c;不太适合用因果图判定表&#xff0c;在这种情况下&#xff0c;一般会采用正交实验法。 2.例子&#xff1a; 字符属性设置&#xff08;4个条件&#xff09; 字体很多 字符样式很多 …...

uniapp小程序,使用腾讯地图获取定位

本篇文章分享一下在实际开发小程序时遇到的需要获取用户当前位置的问题&#xff0c;在小程序开发过程中经常使用到获取定位功能。uniapp官方也提供了相应的API供我们使用。 官网地址&#xff1a;uni.getLocation(OBJECT)) 官网获取位置的详细介绍这里就不再讲述了&#xff0c;大…...

Reactive 编程-Project Reactor

Reactive 编程与 Project Reactor Reactive 编程是一种编程范式&#xff0c;主要用于处理异步数据流。它旨在通过声明式的编程方式处理事件驱动的非阻塞任务&#xff0c;特别适合于构建响应式、可扩展、高并发的应用。随着互联网应用规模的扩大和响应速度的提升需求&#xff0…...

splice用法

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

Redis - 缓存

文章目录 目录 文章目录 1. 什么是缓存&#xff1f; 2. 使用Redis作为缓存 2.1 关系型数据库的缺点 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 缓存淘汰策略 4. 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿 缓存预热 缓存穿透 缓存雪崩 缓存击穿 总结 1. 什么…...

基于SpringBoot+Vue的养老院管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…...

多线程爬虫接入代理IP:高效数据抓取的秘诀

在现代网络环境中&#xff0c;爬虫已经成为获取信息的利器。然而&#xff0c;随着网站反爬措施的不断升级&#xff0c;单线程爬虫往往无法满足需求。多线程爬虫与代理IP的结合&#xff0c;不仅能提高效率&#xff0c;还能有效规避IP封禁问题。本文将详细探讨多线程爬虫接入代理…...

[网络][CISCO]Cisco-PIX配置详解

Cisco PIX防火墙配置指南 任何企业安全策略的一个主要部分都是实现和维护防火墙&#xff0c;因此防火墙在网络安全的实现当中扮演着重要的角色。防火墙通常位于企业网络的边缘&#xff0c;使内部网络与Internet之间或与其他外部网络互相隔离&#xff0c;并限制网络互访&#x…...

拒绝千篇一律,AI帮你定制独一无二的个人写真

每个女人都渴望展现最美的自己&#xff0c;你是否厌倦了拍出千篇一律的照片&#xff1f;今天&#xff0c;我要告诉你一个秘密&#xff0c;用简单三步&#xff0c;即可打造属于你的独一无二个人写真&#xff01;文生图、蒙版换脸、图生图&#xff0c;三步化身超级模特&#xff0…...

在云服务器上安装 RabbitMQ:从零到一的最佳实践

&#x1f6e0; 1. RabbitMQ 简介 RabbitMQ 是一个开源的消息代理中间件&#xff0c;广泛应用于高并发、异步任务队列的场景中。在分布式系统架构中&#xff0c;RabbitMQ 可以充当消息的中转站&#xff0c;帮助不同服务之间进行高效的消息通信。 在这篇文章中&#xff0c;我们…...

【nginx】搭配okhttp 配置反向代理

nginx的默认是一个反向代理。 nginx会默认把输入的请求,转向其他的服务器执行。 这些转向的服务器与客户端发起的服务器不是同一个。 客户端只认识nginx,不知道ngiix转向何方。 正向代理修改okhttp的proxy,实际上很多代理都是正向的。 反向代理修改请求路径到nginx。 感觉还…...

Android V 广播注册和配置注意事项问题

现象 在Android V平台上&#xff0c;应用注册非Protected广播时&#xff0c;如果没有加导出flag会抛出异常导致进程crash。 E/AndroidRuntime: FATAL EXCEPTION: main java.lang.SecurityException: com.demo.myapplication: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORT…...

深入解读Docker核心原理:Namespace资源隔离机制详解

在容器技术中&#xff0c;资源隔离 是容器化能够实现轻量级虚拟化的关键技术之一。通过资源隔离&#xff0c;容器可以拥有自己的独立环境&#xff0c;确保容器之间互不干扰&#xff0c;从而实现应用的安全和稳定。Docker作为主流的容器平台&#xff0c;其核心的资源隔离机制依赖…...

学习通、智慧职教刷课脚本

&#x1f410;个人主页 可惜已不在 &#x1f40b;可以分享给身边有需要的人&#x1f436; &#x1f409;有用的话就留下一个三连吧&#x1f63c; 目录 一.安装 脚本运行器 篡改猴 - Microsoft Edge Addons 二.安装脚本 三.扩展 一.安装 脚本运行器 安装浏览器 Microsoft E…...

SEO写作:从实战到精进的全方位指南

在数字化浪潮中&#xff0c;SEO不再是简单的关键词堆砌&#xff0c;而是成为企业品牌建设与市场拓展的核心策略。作为一名深耕SEO领域的实践者&#xff0c;我深知其中的门道与奥秘。今天&#xff0c;我将结合过往实战经验&#xff0c;以独特视角&#xff0c;带你一窥SEO写作的精…...

解决 git 不是内部或外部命令,也不是可运行的程序

目录 报错提示&#xff1a; 一、解决办法 1、从git官网下载windows版本的git 2、安装 3、注意事项 二、报错 1、解决 fatal: Not a git repository (or any of the parent directories): .git 问题 报错提示&#xff1a; 一、解决办法 Windows下配置Git&#xff1a; 1…...

【卷起来】VUE3.0教程-07-异步请求处理(springboot后端)

&#x1f332; 服务端接口准备 pom文件&#xff0c;引入mybatis/mybatis-plus相关依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>&…...

初一信息科技2024指南辅助教学软件(抓包软件)

专门针对信息科技20204指南写的程序&#xff0c;互联网和直播等知识中包含tcp/ip和udp&#xff0c;三次握手等原理&#xff0c;需要简单明了的实验来说明&#xff0c;在机房中需要用抓包软件&#xff0c;可能需要安装windump npcap等软件非常繁琐&#xff0c;还需要接触保护卡&…...

上汽大众:存储成本节约85%,查询性能提升5倍|OceanBase案例

近日&#xff0c;上汽大众汽车有限公司&#xff08;简称“上汽大众”&#xff09;的积分卡券等关键业务系统&#xff0c;已成功升级至 OB Cloud 云数据库。借助 OceanBase 原生分布式数据库的卓越性能与先进技术&#xff0c;实现了存储成本的大幅降低&#xff0c;高达85%&#…...

如何快准稳 实现MySQL大表历史数据迁移?

历史迁移解决方案以微服务架构为基础&#xff0c;使用多种设计模式&#xff0c;如&#xff1a;单例、桥接、工厂、模板、策略等。其中涉及的核心技术有多线程、过滤器等&#xff0c;致力于解决MySQL大表迁移的问题&#xff0c;提供多种迁移模式&#xff0c;如&#xff1a;库到库…...