Netty(Dummy)用于现有服务

时间:2012-05-09 14:08:02

标签: 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 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();

Netty是否为java.net.Socket连接创建服务器的正确框架? (如果没有,应该使用哪个框架,如果有的话?)

我正在尝试使用QuoteOfTheMoment示例找到一种从Netty开始的方法。 QuoteOfTheMomentServerHandler基本上做我想要的,在传入的消息,返回一些答案,以便上面的代码片段可以使用输入流读取答案,但上面的套接字不能连接到QuoteOfTheMomentServer。错误是“连接被拒绝”。

[编辑]更多说明:
问题(我认为)不是连接或我使用的端口。让我试着更好地提出这个问题:

我刚刚开始使用netty(没有经验)并且不熟悉不同类型的渠道,管道以及其他类型。
服务器应该喜欢一个servlet请求/响应(比如,不是http或试图重建一个http servlet impl),对写入输出流的inputString做出反应,就像在代码片段中一样,然后回写输入流中的一些字符串/字节与代码片段中的一样,因此客户端只会继续运行。因此,连接应保持打开但也是同步的,客户端等待来自服务器的回答。如果我使用示例"Writing the Server Side of a Socket" in the java tutorial我能够让它为客户端工作。但我想利用netty的线程处理等 QuoteOfTheMomentServerHandler看起来像我想要的服务器端实现,但可以设置处理给定的客户端代码?

所以问题是在给定客户端工作方式的情况下应该使用哪种管道,通道或类似的东西?

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

1 个答案:

答案 0 :(得分:1)

Netty是一个TCP / IP框架。所以,如果你正在开发一个TCP / IP服务器,这个工具包很好用。

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

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

Telnet yourserverip 8080

这将打开与服务器的套接字连接。如果您收到Google错误消息。

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

更新

如果您是网络新手,请阅读http://netty.io/docs/stable/guide/html/中的用户指南。

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

请参阅此链接,了解如何编写UDP客户端http://systembash.com/content/a-simple-java-udp-server-and-udp-client/

我建议您将当前服务器的引用从UDP转换为TCP / IP服务器,因为这将为您提供一些创建TCP / IP服务器的实践,而不会涉及太多细节。一旦你对此感到满意,你应该能够从头开始一次。

请记住,Netty会为您处理NIO部分。它是一个基于NIO的更高级别的框架,因此隐藏了很多细节。你不需要很好地了解NIO,但是你需要很好地理解Netty的概念。