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连接的步骤:

  1. 服务器实例化ServerSocket对象,表示通过服务器上的端口通信;
  2. 服务器调用ServerSocket类的accept()方法,等待客户端连接到服务器上给定的端口;
  3. 服务器等待时,客户端实例化Socket对象,指定服务器的名称和端口号来请求连接;
  4. Socket类的构造函数将客户端连接到指定的服务器和端口号,如果通信被建立,则客户端创建Socket对象与服务器通信。
  5. 在服务器端,accept()方法返回服务器一个新的Socket引用,该Socket链接客户端的Socket。
  6. 建立连接后,通过I/O流进行通信,每个Socket都有一个输入流和一个输出流。

ServerSocket类的方法:

序号

方法描述

1

public ServerSocket(int port) throws IOException
创建绑定到特定端口的服务器套接字。

2

public ServerSocket(int port, int backlog) throws IOException
利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。

3

public ServerSocket(int port, int backlog, InetAddress address) throws IOException
使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。

4

public ServerSocket() throws IOException
创建非绑定服务器套接字。

ServerSocket类的常用方法:

序号

方法描述

1

public int getLocalPort()
  返回此套接字在其上侦听的端口。

2

public Socket accept() throws IOException
侦听并接受到此套接字的连接。

3

public void setSoTimeout(int timeout)
 通过指定超时值启用/禁用 SO_TIMEOUT,以毫秒为单位。

4

public void bind(SocketAddress host, int backlog)
将 ServerSocket 绑定到特定地址(IP 地址和端口号)。

Socket类的构造方法:

序号

方法描述

1

public Socket(String host, int port) throws UnknownHostException, IOException.
创建一个流套接字并将其连接到指定主机上的指定端口号。

2

public Socket(InetAddress host, int port) throws IOException
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

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()
通过系统默认类型的 SocketImpl 创建未连接套接字

序号

方法描述

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()
返回此套接字连接的端点的地址,如果未连接则返回 null。

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)
在给定原始 IP 地址的情况下,返回 InetAddress 对象。

2

static InetAddress getByAddress(String host, byte[] addr)
根据提供的主机名和 IP 地址创建 InetAddress。

3

static InetAddress getByName(String host)
在给定主机名的情况下确定主机的 IP 地址。

4

String getHostAddress() 
返回 IP 地址字符串(以文本表现形式)。

5

String getHostName() 
 获取此 IP 地址的主机名。

6

static InetAddress getLocalHost()
返回本地主机。

7

String toString()
将此 IP 地址转换为 String。

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.
通过给定的参数(协议、主机名、端口号、文件名)创建URL。

2

public URL(String protocol, String host, String file) throws MalformedURLException
使用指定的协议、主机名、文件名创建URL,端口使用协议的默认端口。

3

public URL(String url) throws MalformedURLException
通过给定的URL字符串创建URL

4

public URL(URL context, String url) throws MalformedURLException
使用基地址和相对URL创建

序号

方法描述

1

public String getPath()
返回URL路径部分。

2

public String getQuery()
返回URL查询部分。

3

public String getAuthority()
获取此 URL 的授权部分。

4

public int getPort()
返回URL端口部分

5

public int getDefaultPort()
返回协议的默认端口号。

6

public String getProtocol()
返回URL的协议

7

public String getHost()
返回URL的主机

8

public String getFile()
返回URL文件名部分

9

public String getRef()
获取此 URL 的锚点(也称为"引用")。

10

public URLConnection openConnection() throws IOException
打开一个URL连接,并运行客户端访问资源。

URLConnections类方法:

序号

方法描述

1

Object getContent()
检索URL链接内容

2

Object getContent(Class[] classes)
检索URL链接内容

3

String getContentEncoding()
返回头部 content-encoding 字段值。

4

int getContentLength()
返回头部 content-length字段值

5

String getContentType()
返回头部 content-type 字段值

6

int getLastModified()
返回头部 last-modified 字段值。

7

long getExpiration()
返回头部 expires 字段值。

8

long getIfModifiedSince()
返回对象的 ifModifiedSince 字段值。

9

public void setDoInput(boolean input)
URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。

10

public void setDoOutput(boolean output)
URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。

11

public InputStream getInputStream() throws IOException
返回URL的输入流,用于读取资源

12

public OutputStream getOutputStream() throws IOException
返回URL的输出流, 用于写入资源。

13

public URL getURL()
返回 URLConnection 对象连接的URL

二、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()
使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

2

public void run()
如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

3

public final void setName(String name)
改变线程名称,使之与参数 name 相同。

4

public final void setPriority(int priority)
 更改线程的优先级。

5

public final void setDaemon(boolean on)
将该线程标记为守护线程或用户线程。

6

public final void join(long millisec)
等待该线程终止的时间最长为 millis 毫秒。

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)
当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。

4

public static Thread currentThread()
返回对当前正在执行的线程对象的引用。

5

public static void dumpStack()
将当前线程的堆栈跟踪打印至标准错误流。

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

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

相关文章

Windows安装Linux双系统教程

💻Windows安装Linux双系统教程 🥙资源准备🍔启动盘制作🍳分区🌭重启电脑🍱安装Ubuntu 🥙资源准备 💡下载ubuntu系统、refus启动盘制作程序👈 💡一个U盘 &am…

“探秘淘宝商品详情接口:获取电商数据的新途径“

淘宝商品详情接口的技术贴 一、概述 淘宝商品详情接口,也称为淘宝商品详情API,是一个用于获取淘宝商品详情的接口。它可以帮助开发者快速获取淘宝商品信息,从而构建自己的电商应用程序。本文将详细介绍淘宝商品详情接口的使用方法、技术细节…

源码编译CEF(branch=6045)+mp4+mp3笔记

接触Chromium已经过去多年了,一直都依赖别人编译的库,最近想自己整一个,所以有了这篇笔记。 环境要求:WIN10,内存16G,固态硬盘空间200G,VS2022,科学上网(具体配置我这边不需要&#…

问题:vue2修改对象属性值,数据改变,但是页面视图不更新

目的:修改对象node的child属性的值,页面响应式变化 问题:数据是变了,但是页面没反应;在页面中用v-if绑定这个值,数据变了,视图也是不更新 错误写法: this.node.child ""…

TF签名上架

TF签名上架是一种通过上架苹果的内测商城TestFlight实现应用分发的技术。app封装打包这种技术相对于上架App Store来说较为宽松,但一般需要等待1-3天甚至更长的审核期。对于大多开发者来说,自行TF上架可能存在较高的驳回率,同时可能面临更漫长…

定时器的使用

目录 前言 正文 1.方法 schedule(TimerTask task, Date time) 的测试 (1)执行任务的时间晚于当前时间(在未来执行)的效果 (2)线程TimerThread不销毁的原因 (3)使用 public void cancel() 方法实现 T…

手写promis(2)-- 链式编程篇

目录 链式编程 处理异常 和普通内容 链式编程---处理返回promise 链式编程---处理重复引用 链式编程--rejected 链式编程--处理padding状态 链式编程 处理异常 和普通内容 1.返回promise实例:在原本then方法里边创建新promise2.获取返回值:把原本…

监控易:IT基础资源监控的解决方案和价值

随着企业业务的不断发展,IT基础资源监控的重要性日益凸显。IT基础资源监控不仅需要对网络、服务器、操作系统等基础设备进行实时监控,还需要对业务应用及安全设备进行全方位的管控。本文将详细介绍监控易运维管理软件对于IT基础资源监控的问题和挑战、解…

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用

近年来,国内外学者在生态系统的敏感性、适应能力和潜在影响等方面开展了大量的生态脆弱性研究,他们普遍将生态脆弱性概念与农牧交错带、喀斯特地区、黄土高原区、流域、城市等相结合,评价不同类型研究区的生态脆弱特征,其研究内容…

Vue和React对比

Vue和React都是流行的前端JavaScript框架,它们有很多相似点和不同点,以下是它们的优缺点。 相似点: 都使用了组件化的开发模式,使得应用程序更易于理解和维护。都支持虚拟DOM,提高了页面重绘性能。都支持模板化编程方…

基于安卓android微信小程序的小型企业人力资源管理系统-人事考勤app

运行环境 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 项目介绍 基于微信小程序的小型企业人力资源管…

C语言基本算法之选择排序

目录 概要: 代码如下 运行结果如下 概要: 它和冒泡排序一样,都是把数组元素按顺序排列,但是方法不同,冒泡排序是把较小值一个一个往后面移,选择排序则是直接找出最小值,可以这个说&#xff…

Python+OpenCV裂缝面积识别系统(部署教程&源码)

1.研究背景与意义 随着科技的不断发展,计算机视觉技术在各个领域中得到了广泛的应用。其中,图像处理是计算机视觉中的一个重要分支,它通过对图像进行数字化处理,提取出其中的有用信息,为后续的分析和应用提供支持。而…

Maven-自定义插件

Maven自定义插件 一、背景二、命名规范三、插件开发四、执行插件1.执行插件2.简化命令行2.1 命令格式为 mvn groupId:artifactId:goal2.2 命令格式为 mvn ${prefix}:goal 五、构建周期执行插件总结参考链接: 一、背景 Maven是由一系列用于执行构建任务的插件和一个…

2023.11.22 -数据仓库

目录 https://blog.csdn.net/m0_49956154/article/details/134320307?spm1001.2014.3001.5501 1经典传统数仓架构 2离线大数据数仓架构 3数据仓库三层 数据运营层,源数据层(ODS)(Operational Data Store) 数据仓库层&#…

LeetCode39. Combination Sum

文章目录 一、题目二、题解 一、题目 Given an array of distinct integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order. Th…

新生儿近视:原因、科普和注意事项

引言: 近年来,新生儿近视的发病率逐渐上升,引起了广泛关注。新生儿近视的原因复杂,可能受到遗传、环境和行为等多方面因素的影响。本文将深入解析新生儿近视的原因,提供相关科普知识,并为父母和监护人提供…

线性代数 - 几何原理

目录 序言向量的定义线性组合、张成空间与向量基线性变换和矩阵线性复合变换与矩阵乘法三维空间的线性变换行列式矩阵的秩和逆矩阵维度变换点乘叉乘基变换特征值和特征向量抽象向量空间 序言 欢迎阅读这篇关于线性代数的文章。在这里,我们将从一个全新的角度去探索线…

酒店预订订房小程序源码系统+多酒店入驻 功能齐全 附带完整的搭建教程

随着互联网的快速发展,越来越多的人选择通过在线预订平台预订酒店。为了满足这一需求,我们开发了这个酒店预订订房小程序源码系统。该系统基于先进的云计算技术和大数据分析,旨在为用户提供更加便捷、智能的酒店预订服务。 以下是部分代码示…

排序算法--选择排序

实现逻辑 ① 第一轮从下标为 1 到下标为 n-1 的元素中选取最小值,若小于第一个数,则交换 ② 第二轮从下标为 2 到下标为 n-1 的元素中选取最小值,若小于第二个数,则交换 ③ 依次类推下去…… void print_array(int a[], int n){f…