java服务器套接字和客户端套接字如何在同一台电脑中交互



根据此链接中的示例:http://www.javatpoint.com/socket-programming

据我所知,端口号:6666是一个假想的或原始的端口,用于说明套接字编程。我想知道在运行了myClient.javamyServer.java之后,PC是如何知道它有端口为6666的服务器的。

此外,我想知道在进行真正的套接字编程时,myServer.java需要放置在真正的服务器位置,如果不是,那么在哪里?只是想了解在哪里初始化serverSocket类对象!在服务器端还是在客户端?

操作系统或PC(通常)如何搜索可用端口?

您的链接文档已损坏,不过,让我来解释一下网络套接字是如何工作的。

一台计算机有多个网络接口。若您正在运行window,您可以通过在带有ifconfig的linux/osx上运行ipconfig /all来检查它们。您将看到您有一个IP地址为127.0.0.1的环回接口。此外,为了方便起见,决定给这个环回接口添加一个"名称",它将是localhost。您可以在存在127.0.0.1和localhost之间映射的/etc/hosts文件中验证这一点。

也就是说,计算机可以使用系统内核在自己身上找到到localhost的路由。这个环回接口是虚拟的,在操作系统中实现,因此没有数据包会通过以太网接口或wifi卡。

TCP和UDP是在IP之上用于发送数据的协议。TCP通过3向握手建立连接,服务器确认数据包接收。UDP是非面向连接的,因此客户端将向端口发送数据包,并且不会发送任何确认。这只是一个巨大的总结。

当你想监听端口时,你的应用程序需要实际将其告知操作系统,当操作系统的网络组件接收到TCP.dst值等于6666的一些数据包时(在你的情况下),它会将有效负载发送到应用程序。操作系统负责确认数据包和所有底层通信,这对您来说是透明的。

正如您可能猜测的那样,操作系统只能将同一端口端口绑定到单个应用程序。这就是为什么如果你启动两次web服务器,第二次执行就会失败。

您可以在linux机器上使用netstat -l检查哪些端口正在侦听。

相关内容

最新更新