如何让我的Java应用程序在某个套接字上运行HTTP服务器(例如172.16.1.10:8080),并使其在网络上的另一台计算机连接到域时(例如http://myjavadomain.com
)它被重定向到套接字?
答案 0 :(得分:1)
如果您使用的是Apache Tomcat,则以下配置对您有所帮助。
使用Apache Tomcat,您必须在TOMCAT_HOME位置的配置位置进行主机输入。
按照以下有助于您的步骤
1)在server.xml
conf
位置找到TOMCAT_HOME
文件
2)在server.xml
文件中进行以下主机条目
<Host name="www.xyz.com" debug="0" appBase="webapps/mynewhost" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="mynewhost_log." suffix=".txt" timestamp="true"/>
</Host>
In appBase property place the location of your web app
3)现在在浏览器中打开上面的URL。
答案 1 :(得分:0)
如果要运行完全成熟的HTTP服务器,那么您可能希望使用一些外部库。例如,Tomcat是用Java编写的,但也有SUN的httpserver package。如果它只是一个简单的套接字服务器,你可以使用java.net包中的内置类:
ServerSocket server = new ServerSocket(8080);
while (running) {
Socket socket = server.accept();
handleConnection(socket);
}
这将侦听端口8080上的传入套接字连接,并在客户端连接时创建新的Socket
。然后,您可以通过Socket
的{{1}}和InputStream
与客户进行沟通,这可能会在单独的主题中执行,以便您的OuputStream
可以继续收听来自其他客户的传入连接。
至于问题的第二部分:默认情况下,Web浏览器将连接到端口80,并且有几种方法可以进行端口转发。使用iptables的一种可能解决方案是this website:
ServerSocket
但最简单的解决方案是在连接到您的机器时直接指定端口号,例如
iptables -t nat -I PREROUTING --src 0/0 --dst 172.16.1.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080
这假设您的DNS已配置为已将myjavadomain.com解析为172.16.1.10。