【学习参考资料】:菜鸟教程-Java教程
1,Java网络编程
1)概述
网络编程
:编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net
包中J2EE
的API
包含有类和接口,他们提供低层次的通信细节。主要有:
TCP
:传输控制协议,保障了两个应用程序之间的可靠通信,通常用于互联网协议,称为TCP/IP
;UDP
:用户数据报协议,一个无连接的协议,提供了应用程序之间要发送的数据的数据包。
2)Socket编程
套接字
使用TCP
提供了两台计算机之间的通信机制。 客户端程序创建一个套接字
,并尝试连接服务器的套接字
。
当连接建立时,服务器会创建一个 Socket
对象。客户端和服务器现在可以通过对 Socket
对象的写入和读取来进行通信。
java.net.Socket
类代表一个套接字,并且 java.net.ServerSocket
类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。
以下步骤在两台计算机之间使用套接字
建立TCP
连接时会出现:
- 服务器实例化一个
ServerSocket
对象,表示通过服务器上的端口通信。- 服务器调用
ServerSocket
类的accept()
方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。- 服务器正在等待时,一个客户端实例化一个
Socket
对象,指定服务器名称和端口号来请求连接。Socket
类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个Socket
对象能够与服务器进行通信。- 在服务器端,
accept()
方法返回服务器上一个新的socket
引用,该socket
连接到客户端的socket
。
3)ServerSocket
类的方法:服务器应用程序通过使用 java.net.ServerSocket
类以获取一个端口,并且侦听客户端请求。
4)Socket
类的方法:java.net.Socket
类代表客户端和服务器都用来互相沟通的套接字。客户端要获取一个 Socket
对象通过实例化 ,而 服务器获得一个 Socket
对象则通过 accept()
方法的返回值。
5)InetAddress
类的方法:表示互联网协议(IP
)地址。
6)demo
实例
GreetingClient.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29import java.io.*;
import java.net.Socket;
/**
* Socket编程--客户端实例
* @author zhangbc
* @date 2019/3/7 14:26
*/
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 outServer = client.getOutputStream();
DataOutputStream outData = new DataOutputStream(outServer);
outData.writeUTF("Hello from " + client.getLocalSocketAddress());
InputStream inFromServer = client.getInputStream();
DataInputStream inData = new DataInputStream(inFromServer);
System.out.println("服务器响应:" + inData.readUTF());
client.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}GreetingServer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.lang.Thread;
/**
* @author zhangbc
* @date 2019/3/7 15:09
*/
public class GreetingServer extends Thread {
private ServerSocket serverSocket;
public static void main(String[] args) {
int port = Integer.parseInt(args[0]);
try {
Thread thread = new GreetingServer(port);
thread.run();
} catch (IOException ex) {
ex.printStackTrace();
}
}
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();
DataInputStream inData = new DataInputStream(server.getInputStream());
System.out.println(inData.readUTF());
DataOutputStream outData = new DataOutputStream(server.getOutputStream());
outData.writeUTF("谢谢连接我:" + server.getLocalSocketAddress()
+ "\nGoodbye!");
server.close();
} catch (SocketTimeoutException es) {
System.out.println("Socket timed out!");
break;
} catch (IOException ex) {
ex.printStackTrace();
break;
}
}
}
}
2,Java发送邮件
- SendEmail.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82package com.runoob;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.Message.RecipientType;
import java.util.Properties;
/**
* 发邮件(纯文本,HTML文本,附件)
* @author zhangbocheng
* @version v1.0
* @date 2019/3/7 20:40
*/
public class SendEmail {
public static void main(String[] args) throws NullPointerException {
// 收件人邮箱
String to = "xxxxxxxxxxxxxxxxx@qq.com";
// 发件人邮箱
final String from = "xxxxxxxxxxxxxxxxx@163.com";
final String pwd = "xxxxxxxx";
// 指定发邮件的主机
String host = "smtp.163.com";
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.host", host);
properties.put("mail.smtp.auth", "true");
// 获取默认Session对象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, pwd);
}
});
try {
// 创建默认的MimeMessage对象
MimeMessage message = new MimeMessage(session);
// Set From:头部头字段
message.setFrom(new InternetAddress(from));
// Set To:头部头字段
message.addRecipient(RecipientType.TO,
new InternetAddress(to));
// Set Subject:头部头字段
message.setSubject("This is the Subject Line!");
// 设置消息体
message.setText("This is test text.");
// 发送HTML消息,可以插入html标签
message.setContent("<h1>This is actual message</h1>",
"text/html;charset=utf-8");
// 创建消息部分
BodyPart messageBodyPart = new MimeBodyPart();
// 消息
messageBodyPart.setText("This is message body.");
// 创建多重消息
Multipart multipart = new MimeMultipart();
// 设置文本消息
multipart.addBodyPart(messageBodyPart);
// 附件部分
messageBodyPart = new MimeBodyPart();
String fileName = "/home/projects/java_pro/java_instances_demo/src/main/java/com/runoob/SendEmail.java";
DataSource source = new FileDataSource(fileName);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);
// 发送完整部分
message.setContent(multipart);
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully.");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
3,Java Applet基础
1)Applet
基础
Applet
是一种Java
程序,一般运行在支持Java
的Web
浏览器内,是一个全功能的Java应用程序。
Java
中Applet
类继承了java.applet.Applet
类。Applet
类没有定义main()
,所以一个Applet
程序不会调用main()
方法。Applet
被设计为嵌入在一个HTML
页面。- 当用户浏览包含
Applet
的HTML
页面,Applet
的代码就被下载到用户的机器上。- 要查看一个
Applet
需要JVM
。JVM
可以是Web
浏览器的一个插件,或一个独立的运行时环境。- 用户机器上的
JVM
创建一个Applet
类的实例,并调用Applet
生命周期过程中的各种方法。Applet
有Web
浏览器强制执行的严格的安全规则,Applet
的安全机制被称为沙箱安全。Applet
需要的其他类可以用Java
归档(JAR
)文件的形式下载下来。
2)Applet
的生命周期
Applet
类中的四个方法给我们提供了一个框架:
init
: 提供所需的任何初始化。在Applet
标记内的param
标签被处理后调用该方法。start
: 浏览器调用init
方法后,该方法被自动调用。每当用户从其他页面返回到包含Applet
的页面时,则调用该方法。stop
: 当用户从包含Applet
的页面移除的时候,该方法自动被调用。destroy
: 此方法仅当浏览器正常关闭时调用。paint
: 该方法在start()
方法之后立即被调用,或者在Applet
需要重绘在浏览器的时候调用。paint()
方法实际上继承于java.awt
。
3)Applet
类
每一个 Applet
都是 java.applet.Applet
类的子类,基础的 Applet
类提供了供衍生类调用的方法,以此来得到浏览器上下文的信息和服务。
4)Applet
的调用
1 |
|