根据此链接中的示例: http://www.javatpoint.com/socket-programming
据我所知,端口号:6666
是用于说明套接字编程的虚构或原始端口。我想知道在运行myClient.java
和myServer.java
之后,PC如何知道它有服务器端口6666。
另外我想知道在进行Real套接字编程时,myServer.java
需要放在真实的服务器位置,如果不是那么在哪里?只是想了解初始化serverSocket
类对象的位置!在服务器端还是在客户端?
操作系统或PC(一般情况下)如何搜索可用端口?
答案 0 :(得分:0)
您的链接文档已损坏,但是,让我解释一下网络套接字的工作原理。
计算机有多个网络接口。如果您正在运行窗口,可以通过{/ 1}}在linux / osx上运行ipconfig /all
来检查它们。你会看到你有一个IP地址为127.0.0.1的环回接口。此外,方便的是,决定在这个环回接口中添加一个“名称”,它是ifconfig
。您可以在localhost
文件中验证这一点,其中存在127.0.0.1和localhost之间的映射。
说,计算机可以使用系统内核找到自己的localhost路由。这个环回接口是虚拟的,在操作系统中实现,因此没有数据包通过以太网接口或wifi卡。
TCP和UDP是在IP之上用于发送数据的协议。 TCP通过3-way handshake建立连接,并且服务器确认数据包接收。 UDP是非面向连接的,因此客户端将数据包发送到端口,并且不发送任何确认。这只是一个巨大的总结。
当您想要监听端口时,您的应用程序需要实际告诉操作系统,并且当OS的网络组件收到TCP.dst值等于6666的某些数据包时(在您的情况下),它将将有效负载发送到您的应用程序操作系统负责确认您可以透明的数据包和所有底层通信。
正如您可能猜到的,操作系统只能将同一个端口绑定到单个应用程序。这就是为什么如果你开始两次web服务器,第二次执行将失败。
您可以在Linux计算机上检查哪些端口正在侦听/etc/hosts
。