既然IP用來標識計算機,那麼什麼來標識計算機上的網絡應用程序? 答案是端口。端口是一個虛擬的概念,是16位二進制正整數,故取值爲0-65535(十進制)。端口一共可以在一臺計算機上存在12w+(2^17)個,因爲端口屬於傳輸層,傳輸層有兩個重要協議(TCP和UDP),所以兩邊各65536個(2^16)。一般來說端口夠用,因爲計算機上用不到12w多個網絡應用。
端口0-1023爲知名端口,也叫公認端口,比如20,21(ftp), 22(SSH), 80端口(http), 443(https) ,自己開發的應用程序一般不用
端口1023-49151爲註冊端口, 比如3306(MySQL),8080(Tomcat)
端口49152-65535爲動態端口或者私有端口
Windows查看所有使用的端口: cmd下
netstat -ano
Linux下查看所有使用udp和tcp的端口: shell下
netstat -ntulp
解決端口衝突(win10下mysql爲例)
1. 通過第一條命令找到對應進程號
2.第二條命令通過進程號找到對應進程名(可選)
3.任務管理器詳細消息裏結束任務
更多的參數請查詢相關手冊。
JavaDemo:
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
public class Main {
public static void main(String[] args) throws UnknownHostException {
// Socket: 插座, 插口, 套接字
InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 3306);
// local host定義查看hosts文件 C盤Windows/System32/drivers/etc 顯示所有文件
InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 3306);
System.out.println(socketAddress.getHostName());
System.out.println(socketAddress2.getAddress());
// 端口
System.out.println(socketAddress.getPort());
}
}