个人笔记UDP

UDP

消息发送

发送端

​
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
​
//不需要连接服务器
public class UdpClientDemo01 {public static void main(String[] args) throws Exception {//1. 建立一个SocketDatagramSocket socket = new DatagramSocket();
​//2. 建个包String msg = "你好啊,服务器!";InetAddress localhost = InetAddress.getByName("localhost");int port = 9090;
​// 数据,数据的长度起始,要发送给谁DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);//3. 发送包socket.send(packet);
​//4. 关闭流socket.close();}
}

接收端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
​
//还是要等待客户端的链接!
public class UdpServerDemo01 {public static void main(String[] args) throws Exception {//开放端口DatagramSocket socket = new DatagramSocket(9090);// 接收数据包byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
​socket.receive(packet); //阻塞接收
​System.out.println(packet.getAddress().getHostAddress());System.out.println(new String(packet.getData(), 0, packet.getLength()));
​//关闭连接socket.close();}
}

实现聊天

发送端

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
​
public class UdpSenderDemo01 {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(8888);
​// 准备数据:控制台读取 System.inBufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
​while (true) {String data = reader.readLine();byte[] datas = data.getBytes();DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666));
​socket.send(packet);if (data.equals("bye")) {break;}}
​socket.close();}
}

接受端

import javax.xml.stream.FactoryConfigurationError;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
​
public class UdpReceiveDemo01 {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(6666);
​while (true) {// 准备接收包裹byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container, 0, container.length);socket.receive(packet); // 阻塞式接收包裹
​// 断开连接 byebyte[] data = packet.getData();String receiveData = new String(data, 0, packet.getLength());
​System.out.println(receiveData);
​if (receiveData.equals("bye")) {break;}}
​socket.close();}
}

在线咨询

在线咨询:两个人都可以是发送方,也都可以是接收方

TalkSend

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
​
public class TalkSend implements Runnable{private DatagramSocket socket = null;private BufferedReader reader = null;private int fromPort;private String toIP;private int toPort;
​public TalkSend(int formPort,String toIP,int toPort) {this.fromPort = formPort;this.toIP = toIP;this.toPort = toPort;
​try {socket = new DatagramSocket(fromPort);reader = new BufferedReader(new InputStreamReader(System.in));} catch (Exception e) {e.printStackTrace();}}
​@Overridepublic void run() {
​while (true){try {String data = reader.readLine();byte [] datas = data.getBytes();DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));socket.send(packet);if(data.equals("bye")){break;}}catch (Exception e){e.printStackTrace();}}socket.close();//reader.close();}
}
​

TalkReceive

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
​
public class TalkReceive implements Runnable{
​DatagramSocket socket = null;private int port;private String msgFrom;
​public TalkReceive(int port,String msgFrom){this.port = port;this.msgFrom = msgFrom;try {socket = new DatagramSocket(port);}catch (SocketException e){e.printStackTrace();}}@Overridepublic void run() {while (true){try {byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container,0,container.length);socket.receive(packet);//阻塞式接受包裹
​//断开连接byebyte[]data = packet.getData();String receiveData = new String(data,0,packet.getLength());System.out.println(msgFrom+""+receiveData);
​if (receiveData.equals("bye")){break;}
​}catch (IOException e){e.printStackTrace();}}socket.close();}
}

TalkStudent

public class TalkStudent {public static void main(String[] args) {new Thread(new TalkSend(7777,"localhost",9999)).start();new Thread(new TalkReceive(8888,"老师")).start();}
}

TalkTeacher

public class TalkTeacher {public static void main(String[] args) {new Thread(new TalkSend(5555, "localhost", 8888)).start();new Thread(new TalkReceive(9999, "学生")).start();}
}
​

URL

统一资源定位符:定位资源,定位互联网上的某一个资源

URL下载

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
​
public class UrlDown {public static void main(String[] args) throws Exception {// 1. 下载地址URL url = new URL("https://kkimgs.yisou.com/ims?kt=url&at=ori&key=aHR0cDovL3BpYzEuYXJrb28uY29tLzNBM0U3MTY5OTgzNDQ4NDI4MzU2M0JDNDdFOEE4RTY5L3BpY3R1cmUvb18xZmxzZnUxa2kxcW0xYm9oMXZhMjEzc3IxYWZhOC5qcGc=&sign=yx:tcu8a4v4pgux8UURHzXuKCIyTMo=&tv=0_0");
​// 2. 连接到这个资源 HTTPHttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
​InputStream inputStream = urlConnection.getInputStream();
​FileOutputStream fos = new FileOutputStream("d://SecurityFile.jpg");
​byte[] buffer = new byte[1024];int len;while ((len = inputStream.read(buffer)) != -1) {fos.write(buffer, 0, len); // 写出这个数据}
​fos.close();inputStream.close();urlConnection.disconnect(); // 断开连接}
}

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

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

相关文章

26届算法秋招_baidu笔试_算法编程题。

给定2个字符串str1、str2,计算把str1转变为str2的最小操作数。可执行的操作有:插入一个字符修改一个字符删除一个字符解题:这是一个经典的编辑距离问题,通常使用动态规划解决。定义dp[i][j]表示将str1的前i个字符转换为str2的前j个…

uniapp-vue3来实现一个金额千分位展示效果

前言:uniapp-vue3来实现一个金额千分位展示效果实现效果:实现目标:1、封装组件,组件内部要实现,input输入金额后,聚焦离开后,金额以千分位效果展示,聚焦后展示大写金额的弹框随时写的…

途游Android面试题及参考答案

对 Java 面向对象的理解是什么?多态的实现方法有哪些? Java 面向对象是一种编程思想,核心在于将现实世界中的事物抽象为 “对象”,每个对象由 “属性”(数据)和 “方法”(行为)组成,通过对象之间的交互完成功能。其核心特性包括封装、继承和多态: 封装是指将对象的属…

通过filezilla在局域网下实现高速传输数据

一. filezilla安装 1.1 linux安装 sudo apt update sudo apt install openssh-server1.2 windows安装 windows安装可以参考这篇文章 二. 使用方法 2.1 wifi下使用方法 直接查看想要连接的电脑的ip,其他的按照有线网络设置好了ip之后进行连接就行。 2.2 有线网…

python的易物小店交换系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具:Navicat/SQLyog等都可以 在需求分…

[硬件电路-119]:模拟电路 - 信号处理电路 - 比较器,模拟电路中的“决策者”,模拟信号到数字电平逻辑信号的转化者...

前言:比较器的价值1、为何称比较器为“决策者”?逻辑判断的物理实现比较器通过硬件电路直接完成“大于/小于”的二元判断,无需软件干预。例如:在过压保护电路中,比较器实时监测输入电压 Vin​ 与参考电压 Vref​&#…

【从零开始学习Redis】初识Redis

初识Redis 一句话理解Redis: Redis是一个基于内存的、支持多种数据结构的高性能键值数据库,常被用于缓存、分布式锁和消息队列。和 MySQL 的区别:特点RedisMySQL类型非关系型(NoSQL)关系型(SQL)…

CUDA杂记--nvcc使用介绍

nvcc 是 NVIDIA CUDA 生态的核心编译器,负责将 CUDA C/C 代码(混合了主机代码和设备代码)编译为可在 CPU 和 GPU 上运行的二进制文件。它不仅是一个简单的编译器,更是一个“编译驱动程序”,协调多个工具链(…

Codeforces Round 1040 (Div. 2)(补题)

文章目录前言A.Submission is All You NeedB. PathlessC.Double PerspectiveD.Stay or Mirror前言 又被卡在第二题了,当时脑子跟犯糊涂似的,B题越理越乱,导致比赛结束,还在想着题,彻夜难眠! A.Submission …

Apifox 7 月更新|通过 AI 命名参数及检测接口规范、在线文档支持自定义 CSS 和 JavaScript、鉴权能力升级

Apifox 新版本上线啦! 看看本次版本更新主要涵盖的重点内容,有没有你所关注的功能特性: AI 助力接口设计 通过 AI 为参数命名 支持让 AI 对接口进行规范性检测 在线文档功能增强 在线文档支持自定义 CSS 和 JavaScript 目录支持设置展示…

Node.js以及异步编程

什么是服务器?我们知道客户端通过访问服务器,然后服务器去操作数据库把我们想要的数据拿过来给客户端。比如服务器就是餐厅的服务员,数据库就是厨房,客户端就是我们的顾客。首先我们点菜,服务器告诉厨师做饭&#xff0…

UniApp 实现顶部固定导航栏 Tab 及滚动变色效果

顶部导航栏是一个非常常见的组件,尤其是固定在顶部的 Tab 导航,既能方便用户快速切换内容,又能保持页面结构的清晰。本文将详细介绍如何在 UniApp Vue3 TypeScript 项目中实现一个固定在顶部、且能根据滚动状态改变样式的 Tab 导航栏。效果…

c++泛型编程

C泛型编程 1. 基本概念 1.1 泛型编程(Generic Programming) 泛型编程是C中一种重要的编程范式,它通过 参数化类型 来实现代码的通用性和复用性。 1.2 模板(Templates) 模板 是泛型编程的基础,允许编写与数据…

Vue.js + Node.js 开发前后台框架

在 Vue.js + Node.js 开发前后台框架时,推荐采用现代化的技术栈组合和最佳实践。以下是一个高效、可扩展的全栈框架方案: 技术栈推荐 层级 技术选型 说明 前端框架 Vue 3 (Composition API) 最新Vue核心库,推荐使用<script setup>语法 UI组件库 Element Plus / Ant D…

Vision Transformer (ViT) 详解:当Transformer“看见”世界,计算机视觉的范式革命

摘要: 长久以来&#xff0c;卷积神经网络&#xff08;CNN&#xff09;凭借其精心设计的归纳偏置&#xff08;inductive biases&#xff09;&#xff0c;无可争议地统治着计算机视觉领域。然而&#xff0c;一篇名为《An Image is Worth 16x16 Words》的论文彻底改变了这一格局&a…

go goroutine chan 用法

方法1 代码 package mainimport ("fmt""sync""time" )func main() {allChan : make(chan interface{}, 3)var sendWg, recvWg sync.WaitGroup // 分别同步发送和接收// 发送goroutinesendWg.Add(1)go func() {defer sendWg.Done()for i : 0; i &…

Web前端文件上传安全与敏感数据安全处理

一、文件上传安全1. 文件上传时的核心安全检查点文件上传是 Web 应用的高风险功能&#xff0c;需从多维度验证&#xff0c;防止恶意文件上传&#xff08;如木马、病毒&#xff09;或路径攻击&#xff0c;关键检查点包括&#xff1a;MIME 类型验证检查请求头中的 Content-Type&a…

文法中的间接左递归

&#x1f31f; 第一步&#xff1a;理解基本概念✅ 什么是文法&#xff08;Grammar&#xff09;&#xff1f;在编程语言或语法分析中&#xff0c;文法 是一组规则&#xff0c;用来描述一种语言的结构。例如&#xff1a;S → A a A → B b B → S c 这表示&#xff1a;S 可以…

Anthropic:跨越生产效能拐点的AI增长飞轮

资本竞赛中的战略转折点 人工智能领域的竞争已经从理念之争演变为资本、算力与地缘政治影响力的全面较量。Anthropic传闻中的1700亿美元估值&#xff0c;如果成为现实&#xff0c;将标志着前沿AI发展格局的地震式转变。这不仅仅是构建更智能模型的问题&#xff0c;更是为主导下…

【Unity3D实例-功能-移动】小兵移动-通过鼠标点击进行

在Unity的世界里&#xff0c;当你轻点鼠标&#xff0c;角色仿佛被赋予了新的使命&#xff0c;沿着一条无形的轨迹&#xff0c;向着地图上的目标点进发。每一次移动&#xff0c;不仅是简单的位移&#xff0c;更是对未知的探索。这种交互&#xff0c;让玩家与游戏世界紧密相连&am…