如何创建将侦听特定端口并接受 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的主要内容,如果未能解决你的问题,请参考以下文章
哪种 SSL 证书可以确保 Amazon Lightsail 实例上的 C# 侦听器与 iOS 应用程序之间的安全 TCP 连接?