首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >现有服务的Netty (虚拟)

现有服务的Netty (虚拟)
EN

Stack Overflow用户
提问于 2012-05-09 14:08:02
回答 1查看 791关注 0票数 1

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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连接创建服务器的正确框架吗?(如果没有,应使用哪一种框架?

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

编辑更多说明:

问题(我认为)不是连接,也不是我使用的端口。让我尝试更好地提出以下问题:

我刚开始使用netty (没有nio经验),不熟悉不同类型的频道、管道等等。

服务器应该像一样,像servlet请求/响应一样(比如,不是http或试图重建http ),对写入输出流的inputString做出反应,就像在代码片段中那样,并将一些字符串/字节写回输入流,就像代码片段中的那样,因此客户机才会继续前进。因此,连接应该保持打开,但也是同步的,客户端等待服务器的答复。如果我使用示例java教程中的“编写套接字服务器端”,我就能够让它对客户端起作用。但是我想利用网际网路中的线程处理等。

QuoteOfTheMomentServerHandler似乎是我想要的服务器端实现,但是这个设置能处理给定的客户端代码吗?

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

同样,客户机和服务器也是存在的。我希望构建一个虚拟服务器实现来处理现有的客户端。

EN

回答 1

Stack Overflow用户

发布于 2012-05-09 14:34:41

Netty是一个TCP/IP框架。因此,是的,如果您正在开发TCP/IP服务器,则该工具包很适合使用。

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

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

代码语言:javascript
代码运行次数:0
运行
复制
Telnet yourserverip 8080

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

最后一个问题是,您可能正在运行一个服务器,如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/的链接。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10517811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档