Java中常用的端口号有哪些
在网络通信中,端口号用于标识一台计算机上的特定进程或服务。Java作为一门广泛应用于网络通信的编程语言,开发人员需要了解常用的端口号,以便在编写网络应用程序时正确配置和使用。
常见的端口号
以下是一些常见的端口号及其对应的服务或协议:
- 80端口:用于HTTP协议,是Web服务器默认的端口号。在Java中,可以使用
HttpServer
类来创建简单的HTTP服务器。
import com.sun.net.httpserver.HttpServer;
public class SimpleHttpServer {
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(80), 0);
server.createContext("/", new MyHandler());
server.setExecutor(null);
server.start();
}
}
class MyHandler implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
String response = "Hello, World!";
exchange.sendResponseHeaders(200, response.length());
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
- 443端口:用于HTTPS协议,是加密的HTTP协议。在Java中,可以使用
SSLServerSocket
类来创建简单的HTTPS服务器。
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SimpleHttpsServer {
public static void main(String[] args) throws IOException {
SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(443);
while (true) {
Socket socket = sslServerSocket.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
String request = reader.readLine();
String response = "Hello, World!";
writer.println("HTTP/1.1 200 OK");
writer.println("Content-Length: " + response.length());
writer.println();
writer.println(response);
writer.close();
reader.close();
socket.close();
}
}
}
- 22端口:用于SSH协议,是一种远程登录的安全协议。在Java中,可以使用
JSch
库来进行SSH连接。
import com.jcraft.jsch.*;
public class SimpleSshClient {
public static void main(String[] args) throws JSchException {
JSch jsch = new JSch();
Session session = jsch.getSession("username", "hostname", 22);
session.setPassword("password");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setCommand("ls");
channel.connect();
channel.disconnect();
session.disconnect();
}
}
- 3306端口:用于MySQL数据库。在Java中,可以使用
JDBC
来连接和操作MySQL数据库。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class SimpleMysqlClient {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/database";
String username = "username";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM table");
while (resultSet.next()) {
System.out.println(resultSet.getString("column"));
}
resultSet.close();
statement.close();
connection.close();
}
}
- 25端口:用于SMTP协议,即邮件发送协议。在Java中,可以使用
JavaMail
库来发送电子邮件。
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class SimpleSmtpClient {
public static void main(String[] args) throws MessagingException {
String host = "smtp.gmail.com";
String username = "your-email@gmail.com";
String password = "your-password";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "25");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
Message message = new MimeMessage(session);
message.setFrom