一、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类的方法:
序号 |
方法描述 |
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 解析:
序号 |
方法描述 |
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 = "[email protected]";
// 发件人电子邮箱
String from = "[email protected]";
// 指定发送邮件的主机为 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() |