Java 网络编程、e-mail、多线程编程
一、Java 网络编程:
网络编程时指编写运行在多个设备的程序,这些设备通过网络连接起来。
Java.net包中的J2SE的API包含有类和接口,提供低层次的通信细节。
java.net 包中提供了两种常见的网络协议的支持:
TCP:TCP(英语:Transmission Control Protocol,传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP 层是位于 IP 层之上,应用层之下的中间层。TCP 保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。
UDP:UDP (英语:User Datagram Protocol,用户数据报协议),位于 OSI 模型的传输层。一个无连接的协议。提供了应用程序之间要发送数据的数据报。由于UDP缺乏可靠性且属于无连接协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包。
1、Socket编程:
套接字使用TCP提供计算机之间的通讯机制。客户端创建一个套接字,连接服务器的套接字,建立连接时,服务器创建Socket对象。客户端和服务器通过对Socket对象的写入和读取进行通信。java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。
计算机间使用套接字建立TCP连接的步骤:
- 服务器实例化ServerSocket对象,表示通过服务器上的端口通信;
- 服务器调用ServerSocket类的accept()方法,等待客户端连接到服务器上给定的端口;
- 服务器等待时,客户端实例化Socket对象,指定服务器的名称和端口号来请求连接;
- Socket类的构造函数将客户端连接到指定的服务器和端口号,如果通信被建立,则客户端创建Socket对象与服务器通信。
- 在服务器端,accept()方法返回服务器一个新的Socket引用,该Socket链接客户端的Socket。
- 建立连接后,通过I/O流进行通信,每个Socket都有一个输入流和一个输出流。
ServerSocket类的方法:
| 序号 | 方法描述 |
| 1 | public ServerSocket(int port) throws IOException |
| 2 | public ServerSocket(int port, int backlog) throws IOException |
| 3 | public ServerSocket(int port, int backlog, InetAddress address) throws IOException |
| 4 | public ServerSocket() throws IOException |
ServerSocket类的常用方法:
| 序号 | 方法描述 |
| 1 | public int getLocalPort() |
| 2 | public Socket accept() throws IOException |
| 3 | public void setSoTimeout(int timeout) |
| 4 | public void bind(SocketAddress host, int backlog) |
Socket类的构造方法:
| 序号 | 方法描述 |
| 1 | public Socket(String host, int port) throws UnknownHostException, IOException. |
| 2 | public Socket(InetAddress host, int port) throws IOException |
| 3 | public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException. |
| 4 | public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException. |
| 5 | public Socket() |
| 序号 | 方法描述 |
| 1 | public void connect(SocketAddress host, int timeout) throws IOException |
| 2 | public InetAddress getInetAddress() |
| 3 | public int getPort() |
| 4 | public int getLocalPort() |
| 5 | public SocketAddress getRemoteSocketAddress() |
| 6 | public InputStream getInputStream() throws IOException |
| 7 | public OutputStream getOutputStream() throws IOException |
| 8 | public void close() throws IOException |
InetAddress类的方法:
| 序号 | 方法描述 |
| 1 | static InetAddress getByAddress(byte[] addr) |
| 2 | static InetAddress getByAddress(String host, byte[] addr) |
| 3 | static InetAddress getByName(String host) |
| 4 | String getHostAddress() |
| 5 | String getHostName() |
| 6 | static InetAddress getLocalHost() |
| 7 | String toString() |
Socket客户端实例:
// 文件名 GreetingClient.java
import java.net.*;
import java.io.*;
public class GreetingClient {
public static void main(String [] args) {
String serverName = args[0];
int port = Integer.parseInt(args[1]);
try {
System.out.println("连接到主机:" + serverName + " ,端口号:" + port);
Socket client = new Socket(serverName, port); System.out.println("远程主机地址:" + client.getRemoteSocketAddress());
OutputStream outToServer = client.getOutputStream(); DataOutputStream out = new DataOutputStream(outToServer); out.writeUTF("Hello from " + client.getLocalSocketAddress()); InputStream inFromServer = client.getInputStream(); DataInputStream in = new DataInputStream(inFromServer); System.out.println("服务器响应: " + in.readUTF()); client.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
Socket服务器实例:
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread {
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException {
serverSocket = new ServerSocket(port); serverSocket.setSoTimeout(10000);
}
public void run() {
while(true) { try {
System.out.println("等待连接,端口号为:" + serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept(); System.out.println("远程主机地址:" + server.getRemoteSocketAddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new
DataOutputStream(server.getOutputStream()); out.writeUTF("连接:" + server.getLocalSocketAddress() + "\nGoodbye!");
server.close();
}catch(SocketTimeoutException s) {
System.out.println("Socket timed out!");
break;
}catch(IOException e) {
e.printStackTrace(); break;
}
}
}
public static void main(String [] args) {
int port = Integer.parseInt(args[0]);
try {
Thread t = new GreetingServer(port); t.run();
}catch(IOException e) {
e.printStackTrace();
}
}
}
2、URL处理:
URL(Uniform Resource Locator)统一资源定位符,俗称网页地址。URL分为如下几个部分:
protocol://host:port/path?query#fragment
protocol(协议)可以是 HTTP、HTTPS、FTP 和 File,port 为端口号,path为文件路径及文件名。HTTP 协议的 URL 实例如下:
http://www.example.com/index.html?language=cn#j2se
URL 解析:
- 协议为(protocol):http
- 主机为(host:port):www.example.com
- 端口号为(port): 80 ,以上URL实例并未指定端口,因为 HTTP 协议默认的端口号为 80。
- 文件路径为(path):/index.html
- 请求参数(query):language=cn
- 定位位置(fragment):j2se,定位到网页中 id 属性为 j2se 的 HTML 元素位置
- URL类的方法:
| 序号 | 方法描述 |
| 1 | public URL(String protocol, String host, int port, String file) throws MalformedURLException. |
| 2 | public URL(String protocol, String host, String file) throws MalformedURLException |
| 3 | public URL(String url) throws MalformedURLException |
| 4 | public URL(URL context, String url) throws MalformedURLException |
| 序号 | 方法描述 |
| 1 | public String getPath() |
| 2 | public String getQuery() |
| 3 | public String getAuthority() |
| 4 | public int getPort() |
| 5 | public int getDefaultPort() |
| 6 | public String getProtocol() |
| 7 | public String getHost() |
| 8 | public String getFile() |
| 9 | public String getRef() |
| 10 | public URLConnection openConnection() throws IOException |
URLConnections类方法:
| 序号 | 方法描述 |
| 1 | Object getContent() |
| 2 | Object getContent(Class[] classes) |
| 3 | String getContentEncoding() |
| 4 | int getContentLength() |
| 5 | String getContentType() |
| 6 | int getLastModified() |
| 7 | long getExpiration() |
| 8 | long getIfModifiedSince() |
| 9 | public void setDoInput(boolean input) |
| 10 | public void setDoOutput(boolean output) |
| 11 | public InputStream getInputStream() throws IOException |
| 12 | public OutputStream getOutputStream() throws IOException |
| 13 | public URL getURL() |
二、Java 发送邮件:
使用java应用程序发送e-mail,首先需在电脑上安装JavaMail API和Java Activation Framework(JAF)。示例:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
// 收件人电子邮箱
String to = "abcd@gmail.com";
// 发件人电子邮箱
String from = "web@gmail.com";
// 指定发送邮件的主机为 localhost
String host = "localhost";
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
// 获取默认session对象
Session session = Session.getDefaultInstance(properties);
try{
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: 头部头字段
message.setSubject("This is the Subject Line!");
// 设置消息体
message.setText("This is actual message");
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
三、Java 多线程编程:
Java提供内置的多线程编程支持。一条线程指的是进程中一个单一顺序的控制流。一个进程中可以并发多个线程。每个线程执行不同的任务。一个线程不能独立存在,必须是进程的一部分。
线程的声明周期:
◆ 新建状态:使用new关键字和thread类或其子类建立一个线程后,该线程处于新建状态。
◆ 就绪状态:现成对象调用start()方法后,就进入就绪状态。
◆ 运行状态:现成获取CPU资源,执行run(),进入运行状态。
◆ 阻塞状态:现成执行sleep()、suspend()等方法,失去占用资源,进入阻塞状态。
◆ 终止状态:现成完成任务或终止条件发生,该线程进入终止状态。
现成的优先级:
Java 线程的优先级是一个整数,其取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。默认情况下,每一个线程都会分配一个优先级 NORM_PRIORITY(5)
创建线程的方法:
◆ 通过Runnable接口;
◆ 通过继承thread类本身;
◆ 通过callable和future创建线程。
Thread方法:
| 序号 | 方法描述 |
| 1 | public void start() |
| 2 | public void run() |
| 3 | public final void setName(String name) |
| 4 | public final void setPriority(int priority) |
| 5 | public final void setDaemon(boolean on) |
| 6 | public final void join(long millisec) |
| 7 | public void interrupt() |
| 8 | public final boolean isAlive() |
Thread的静态方法:
| 序号 | 方法描述 |
| 1 | public static void yield() |
| 2 | public static void sleep(long millisec) |
| 3 | public static boolean holdsLock(Object x) |
| 4 | public static Thread currentThread() |
| 5 | public static void dumpStack() |
相关文章:
Java 网络编程、e-mail、多线程编程
一、Java 网络编程: 网络编程时指编写运行在多个设备的程序,这些设备通过网络连接起来。 Java.net包中的J2SE的API包含有类和接口,提供低层次的通信细节。 java.net 包中提供了两种常见的网络协议的支持: TCP:TCP&…...
为虚幻引擎开发者准备的Unity指南
目录 1.前言2.编辑器2.1 Scene 视图(视口)2.2 Game 视图 (Play in Editor)2.3.Hierarchy 窗口 (World Outliner)2.4 Project 窗口(Content Browser)2.5 Inspector (Details)2.6 Console(消息视图/输出日志)2.7 Modes 面板在哪里&a…...
Vue 2使用element ui 表格不显示
直接修改package.json文件 把这两个依赖修改成对应的 删除node_modules 重新安装依赖 重启...
C++学习 --文件
文件操作步骤: 1, 包含头文件#include<fstream> 2, 创建流对象:ofstream ofs 3, 打开文件:ofs.open("文件路径", 打开方式) 4, 写数据:ofs <<…...
java/Android:将字符串按数量分割
分割成数组 import java.util.Arrays;/*** Java将字符串按照指定长度分割成字符串数组*/ public class StringUtils {public static void main(String[] args){String data "227d77a7a244c7b2be3180f2d46be352f56ddf92866692f2cac797358097e5a3e90f6d20bb96bc516a4ab9c0…...
JVM 监控命令详解
文章目录 JDK 中与常用命令行工具jpsjstatjinfojmap导出 dump 文件查看堆内存信息 jstack JVM 可视化分析工具 JDK 中与常用命令行工具 jps 查看当前服务器正在执行的 Java 进程 $> jps 7584 Application 16433 AdminApplication 14209 Jps 5813 Bootstrap 5575 TestApplic…...
TEE威胁评分与评级
目录 一、攻击潜力 1.1 攻击潜力网格 1、实际经过的时间: 2、访问TOE(目标设备)...
-bash: ./deploy.sh: /bin/bash^M: bad interpreter: No such file or directory
文章目录 场景解决 场景 jenkins 发布失败, 报错ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [126]], 这说明远程服务器的deploy.sh执行失败, 首先检查权限,没有发现问题,然后手动执行一遍又报错"-ba…...
【文末送书】十大排序算法C++代码实现
欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…...
vue-waterfall2 实现瀑布流,及总结的问题
注意:引入需要在主界面引入,直接在组件中引用会有问题 1.安装 npm install vue-waterfall21.8.20 --save (提示:一定要安装1.8.20,最新版会有一部分问题) 2.打开main.js文件 import waterfall from v…...
grafana二次启动失败
背景 安装grafana后启动使用正常,但是关机后再启动显示启动失败,但是看日志又没有报错信息,但是就是启动不了 原因分析 其实是/var/lib/grafana/grafana.db文件损坏了,所以需要把这个文件删掉之后重新启动就正常了,…...
C/C++杂谈-printf的可变参数机制
C/C杂谈-printf的可变参数机制 文章目录 C/C杂谈-printf的可变参数机制printf的使用printf的源码源码剖析 多参数实现机制原理 C11引入了可变参数模板机制,对模板参数进行了高度泛化,但是对于可变参数其实C语言学习中早已遇到过,那就是printf…...
es基本语法 (kibana)
#添加 (不添加id默认会生成id) POST /cj/test {"name":"jack","sex":"1","age":12 } #添加 (id为第5个的) POST /cj/test/5 {"name":"jackson","sex":"1","age":12 } #条…...
Tesco EDI需求分析
Tesco,成立于1919年,是一家全球领先的综合性零售企业,总部位于英国。公司致力于提供高质量、多样化的商品和服务,以满足客户的需求。Tesco的使命是通过创新和卓越的客户服务,为客户创造更美好的生活。多年来࿰…...
html常用的标签
基本结构标签 <!DOCTYPE>: 定义 HTML 文档类型。<html>: HTML 文档的根元素。<head>: 文档的头部,包含了元数据和引用的外部资源。<title>: 定义网页标题,显示在浏览器标签上。&l…...
护眼灯什么价位的好?适合学生入手的护眼台灯推荐
据60年前的统计,中国人口的近视率约为10%至20%。 国家卫健委发布的中国首份眼健康白皮书显示,我国小学生近视率为47.2%,初中生近视率为75.8%,大学生近视率超过90%。如今,“低头族”随处可见,近视人群日益增…...
大数据架构
大数据架构 https://huaweicloud.csdn.net/633578fed3efff3090b58398.html https://blog.csdn.net/yuanziok/article/details/117030031 https://blog.csdn.net/qq_46675545/article/details/121985987 https://blog.csdn.net/qq_33367934/article/details/127685417 https://b…...
【Linux】C文件系统详解(四)——磁盘的物理和抽象结构
文章目录 磁盘结构磁盘物理结构磁盘的具体物理结构磁盘结构的逻辑抽象 文件系统BootBlockSuperBlockGroupDescriptorTableinode tableDataBlocksinodeBitmapblockBitmaplinux中的inode 和文件名如何理解文件的增删查改删 补充细节1.如果文件误删了,我们该怎么办?2.inode确定分…...
论文-分布式-拜占庭将军问题
目录 0-前言 1-导引 2-不可能性 3将军(1叛徒)问题不存在解/不能达成共识 少于3m1个将军(有m个叛徒)不存在解/不能达成共识 精确一致性与近似一致性是同等困难的 3-使用口头消息的解 “口头消息”的含义 OM(m)算法的步骤 OM(m)算法的正确性推导 4-使用签名消息情况下…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
