如何创建将侦听特定端口并接受 TCP 连接(非 https)的 servlet

Posted

技术标签:

【中文标题】如何创建将侦听特定端口并接受 TCP 连接(非 https)的 servlet【英文标题】:How to create servlet that will listen on specific port and accept TCP connections (non-https) 【发布时间】:2011-05-21 07:54:34 【问题描述】:

我需要创建 servlet 来监听某个特定端口(如 serverSocket.accept()),生成新线程(如普通 servlet)并将套接字(或仅输入流和输出流)传递给我的代码。 这个连接与http无关。我需要读写二进制数据到打开的连接。

Tomcat 可以吗?从哪里开始? 我已经搜索了 GenericSocket 示例,但我看到从 GenericSocket 继承的 servlet 仍然必须在 web.xml 中配置一些 url 模式 - 但这是特定于 http 的。

【问题讨论】:

servlet for implementing socket connection 的可能重复项 【参考方案1】:

您可以做所有这些,只需编写代码,但为什么需要 servlet 部分?还是Tomcat?

【讨论】:

【参考方案2】:

一定要查看servlet for implementing socket connection。您正在尝试做的事情是非标准的。

【讨论】:

【参考方案3】:

我想使用一些 servlet 容器(如 Tomcat),因为我也会使用 WebServices(作为客户端和服务器)。

【讨论】:

【参考方案4】:

很多年前,当 servlet 首次在 Java 中引入时,关于 servlet 编程的最佳书籍之一是 Jason Hunter 的 Java Servlet Programming(由 OReilly 出版)。这本书附带了可下载的源代码示例,其中包括所谓的 DaemonHttpServlet 类,您可以将其子类化以完全按照您的要求进行操作。

源代码见此链接:http://java.codefetch.com/example/qg/src/com/oreilly/servlet/DaemonHttpServlet.java

还有一个 servlet 也充当 RMI 服务器。

我明白为什么有人会看到以这种方式使用 servlet 的实用性;如果您的主应用程序是基于 HTTP 的 Web 应用程序,但您的应用程序的一小部分需要您通过原始套接字公开 RMI 接口或一些自定义接口,那么将它们实现为 servlet 将更容易将您的应用程序干净地部署为单个 .war 或 .ear 文件。

希望对您有所帮助。

更新:一些快速的谷歌搜索显示以下内容:

http://blogs.webtide.com/gregw/entry/jetty_websocket_server http://code.google.com/p/socketio-java/

因此,对于 html5 WebSockets,使用 Servlet 进行非 http(s) 原始套接字工作似乎毕竟不是这样一个非标准用例。

【讨论】:

以上是关于如何创建将侦听特定端口并接受 TCP 连接(非 https)的 servlet的主要内容,如果未能解决你的问题,请参考以下文章

当服务器接受 TCP 连接时端口会改变吗?

Linux下nc命令的使用

哪种 SSL 证书可以确保 Amazon Lightsail 实例上的 C# 侦听器与 iOS 应用程序之间的安全 TCP 连接?

TCP 连接打开后会移动到另一个端口吗? [复制]

TCP 连接打开后会移动到另一个端口吗? [复制]

如何使用Nmap进行端口扫描什么是端口扫描?