Java 现有服务的净额(虚拟)

Java 现有服务的净额(虚拟),java,sockets,netty,Java,Sockets,Netty,我想为一个现有服务编写一个虚拟服务(使用Netty)。它将用于测试目的 服务的现有客户端代码片段如下所示: Socket socket = new java.net.Socket(); socket.connect(new InetSocketAddress("localhost", 8080), 10000); socket.setSoTimeout(20000); // set a timeout of 20 seconds InputStreamReader ir = new InputS

我想为一个现有服务编写一个虚拟服务(使用Netty)。它将用于测试目的

服务的现有客户端代码片段如下所示:

Socket socket = new java.net.Socket();
socket.connect(new InetSocketAddress("localhost", 8080), 10000);
socket.setSoTimeout(20000); // set a timeout of 20 seconds
InputStreamReader ir = new InputStreamReader(socket.getInputStream());
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// write some string to the server and wait for answer
out.println("SomeCommand");
// server has written some answer, read it
char[] c = new char[2];
ir.read(c, 0, 2);
String cs = new String(c);
if ("OK".equals(cs.toString())) {
    // write some more string's to the server
}
// we're done, close the connection
out.println("BYE");
out.close();
socket.close();
为java.net.Socket连接创建服务器的框架是否正确?(如果没有,应该使用哪种框架,如果有的话?)

我试图找到一种方法,使用QuoteOfTheMoment示例从Netty开始。QuoteOfTheMomentServerHandler基本上实现了我想要的功能,在收到消息时,返回一些答案,以便上面的代码段可以使用inputstream读取答案,但上面的套接字无法连接到QuoteOfTheMomentServer。错误是“连接被拒绝”

[编辑]更多说明:
问题(我想)是我没有连接或使用的端口。让我试着问一个更好的问题:

我刚开始学习netty(没有nio经验),不熟悉不同类型的渠道、管道等等。
服务器应该,一个servlet请求/响应(比如,不是http或试图重建http servlet impl),对写入输出流的输入字符串(如代码片段中所示)作出反应,并像代码片段中所示将一些字符串/字节写回输入流,这样客户端才可以继续。因此,连接应该保持打开,但也应该是同步的,客户机等待服务器的响应。如果我使用这个例子,我就能让它为客户工作。但我想利用netty的线程处理等功能。
QuoteOfTheMomentServerHandler似乎是我想要的服务器端实现,但该设置能否处理给定的客户端代码

所以问题是,考虑到客户的工作方式,应该使用哪种管道、通道或类似的东西


同样,客户机和服务器是存在的。我想构建一个虚拟服务器实现来与现有客户机一起工作。

Netty是一个TCP/IP框架。因此,如果您正在开发TCP/IP服务器,那么可以使用该工具包

我假设您在尝试将客户端连接到服务器时出错。此外,服务器也应该正在运行

当收到一个连接被拒绝的错误时,有两个需要检查。第一个是服务器上的防火墙(如果有),允许连接到端口8080?其次,从客户端计算机尝试打开与服务器的telnet会话,如下所示:

Telnet yourserverip 8080
这将打开到服务器的套接字连接。如果你收到一条错误信息,用谷歌搜索它

最后一个问题是,您可能正在运行像tomcat、glassfish和IIS这样的服务器,它已经使用了8080端口。尝试使用非标准端口,例如10810

更新:

如果您是netty的新手,请阅读此处的用户指南

我看了片刻服务的报价,我相信我发现了部分问题。即时服务的报价是一个广播UDP/IP客户端和服务器。UDP是TCP IP的轻量级“版本”。它不保证传递到客户端或服务器,而是广播。UDP有点像无线电广播,因为它通常不针对特定的IP,而是通过整个网络进行广播。因此,正常的TCP IP连接将无法在UDP服务器上工作

请参阅有关如何编写UDP客户端的链接

我建议您将当前服务器的报价从UDP转换为TCP/IP服务器,因为这将为您提供一些创建TCP/IP服务器的实践,而不会涉及太多细节。一旦你适应了,你应该能够从头开始


请记住,Netty为您处理NIO部分。它是一个基于NIO的更高层次的框架,所以隐藏了很多细节。要使用netty,你不需要非常了解NIO,但你需要很好地理解netty的概念。

+1。还要确保您正在收听正确的界面。为了获得最佳效果,我总是使用“0.0.0.0”(所有接口),但很容易在“localhost”上错误地侦听,然后您就无法从远程连接。感谢@Namphibian的回复。我的问题可能表述得不正确。我希望问题现在清楚了。我不会在某种容器中运行服务器。它应该是一个独立运行的进程。现在正在测试,所有的都在本地机器上的独立程序中运行。由于我无法访问您当前的客户端,因此很难告诉您如何设置服务器。然而,既然您提到了矩服务器的报价或多或少是您想要的,我将研究该示例并将其用作服务器的框架。真正掌握任何框架的唯一方法是理解概念,然后开始原型设计。netty的学习曲线并没有那么糟糕。试试看,你可以在这里找到netty的用户指南。这是对netty的一个简单而温和的介绍。我已经阅读了netty文档好几次,并尝试了一些示例,但我并不清楚应该使用哪个通道或管道实现。事实上,我没有更多的时间来真正尝试和解决所有问题。使用java教程站点上的上述示例,我现在有了一个工作的服务器虚拟机。所以,我恐怕我的问题没有得到回答,但还是要感谢你的努力。