0

有一个现有的服务,我想为其编写一个虚拟服务(使用 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(没有nio经验)并且不熟悉不同类型的渠道、管道等等。
服务器应该servlet 请求/响应(例如,不是 http 或尝试重建 http servlet impl),对写入输出流的 inputString 做出反应,如代码片段中一样,并将一些字符串/字节写回输入-stream 在代码片段中,所以客户端才继续。所以连接应该保持打开但也是同步的,客户端等待来自服务器的应答。如果我在 java 教程中使用示例“编写套接字的服务器端”,我可以让它为客户端工作。但我想利用netty的线程处理等。
QuoteOfTheMomentServerHandler 似乎是我想要的服务器端实现,但是该设置可以处理给定的客户端代码吗?

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

同样,客户端和服务器是存在的。我想构建一个虚拟服务器实现以与现有客户端一起使用。

4

1 回答 1

1

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

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

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

Telnet yourserverip 8080

这将打开到服务器的套接字连接。如果您收到错误消息,请使用 Google 搜索。

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

更新:

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

我查看了即时服务的报价,我相信我发现了部分问题。The Quote of the moment service 是一个广播 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,但你需要很好地理解 Netty 的概念。

于 2012-05-09T14:34:41.900 回答