江苏建设网站,广安建网站,好的建筑设计网站推荐,建立网站的申请一、Java 网络编程#xff1a;
网络编程时指编写运行在多个设备的程序#xff0c;这些设备通过网络连接起来。
Java.net包中的J2SE的API包含有类和接口#xff0c;提供低层次的通信细节。
java.net 包中提供了两种常见的网络协议的支持#xff1a;
TCP#xff1a;TCP
网络编程时指编写运行在多个设备的程序这些设备通过网络连接起来。
Java.net包中的J2SE的API包含有类和接口提供低层次的通信细节。
java.net 包中提供了两种常见的网络协议的支持
TCPTCP英语Transmission Control Protocol传输控制协议 是一种面向连接的、可靠的、基于字节流的传输层通信协议TCP 层是位于 IP 层之上应用层之下的中间层。TCP 保障了两个应用程序之间的可靠通信。通常用于互联网协议被称 TCP / IP。
UDPUDP 英语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利用指定的 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处理
URLUniform Resource Locator统一资源定位符俗称网页地址。URL分为如下几个部分
protocol://host:port/path?query#fragment
protocol(协议)可以是 HTTP、HTTPS、FTP 和 Fileport 为端口号path为文件路径及文件名。HTTP 协议的 URL 实例如下:
http://www.example.com/index.html?languagecn#j2se
URL 解析
协议为(protocol)http主机为(host:port)www.example.com端口号为(port): 80 以上URL实例并未指定端口因为 HTTP 协议默认的端口号为 80。文件路径为(path)/index.html请求参数(query)languagecn定位位置(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 FrameworkJAF。示例
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
// 收件人电子邮箱
String to abcdgmail.com;
// 发件人电子邮箱
String from webgmail.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_PRIORITY5
创建线程的方法
◆ 通过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()将当前线程的堆栈跟踪打印至标准错误流。