【问题标题】:Confusion over Sockets and Ports对套接字和端口的困惑
【发布时间】:2012-02-11 17:46:12
【问题描述】:

我正在尝试编写一个程序来“侦听”在 TCP/IP 端口上运行的应用程序。

当我将浏览器指向 localhost:30003 时,我将应用程序的输出流打印到屏幕上。看起来浏览器成功地“监听”了端口。

这里发生了什么?我的浏览器是轮询应用程序还是应用程序推送浏览器获取的 tcp 数据?

我不确定是否需要创建客户端或服务器实例来获取这些数据。

【问题讨论】:

  • 这是您需要的客户端实例(连接到端口 30003)。
  • 删除了[java] 标签,它并不真正相关。

标签: sockets port


【解决方案1】:

了解实际情况的最佳方法之一是启动 Wireshark 并跟踪 tcp 流。

http://www.wireshark.org/

或者,如果您只关心文本而不关心网络细节,则可以使用 TCP mon 之类的东西。

http://ws.apache.org/commons/tcpmon/download.cgi

根据您问题中的有限信息,最有可能的是浏览器建立了 tcp 连接,而您发回了格式错误的响应。浏览器假定您是一个损坏的站点,并且最好进行调整。如果您没有发送正确的 http 标头,它不知道还能做什么,因此它可能只是将文本放在屏幕上。

了解详细信息的最佳方法是使用 wireshark 或 tcpmon

【讨论】:

    【解决方案2】:

    将浏览器指向 localhost:30003 将导致它打开到 localhost 上的端口 30003 的连接,并发送字符串“GET /”以从被认为是网络主机的网站请求网页。无论您的应用在接收到连接时发送什么文本,Web 浏览器都会简单地显示它,就好像它已接收到 Web 服务器上的文本文件的内容一样。

    【讨论】:

      【解决方案3】:

      当您在浏览器中写入“localhost:30003”时,将建立与某个程序的连接,该程序侦听您计算机上的端口 30003。 URL 中的前缀,(默认 HTTP)决定了服务器和客户端使用的协议,在这种情况下,浏览器是连接到您的 PC 的客户端,即服务器。

      如果你想对你的程序做同样的事情,你可以使用相同的端口 30003 设置到你的本地主机的套接字连接。你的程序然后成为客户端。根据程序(您没有提及任何内容),您可能有更多协议选项,并且需要在程序中处理协议。

      另一种方法是使用telnet 连接到您的程序,但这取决于可用的协议。

      【讨论】:

        猜你喜欢
        • 2014-02-01
        • 2019-04-12
        • 1970-01-01
        • 1970-01-01
        • 2013-04-09
        • 2013-10-24
        • 1970-01-01
        • 1970-01-01
        • 2015-10-16
        相关资源
        最近更新 更多