既然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());
}
}