有一个现有的服务,我想为它编写一个虚拟服务(使用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连接创建服务器的正确框架吗?(如果没有,应使用哪一种框架?
我正试图找到一种方法,从Netty开始,使用QuoteOfTheMoment示例。QuoteOfTheMomentServerHandler基本上做我想做的事情,在传入消息时,返回一些答案,以便上面的代码段可以使用输入流读取答案,但是上面的套接字不能连接到QuoteOfTheMomentServer。错误是“连接被拒绝”。
编辑更多说明:
问题(我认为)不是连接,也不是我使用的端口。让我尝试更好地提出以下问题:
我刚开始使用netty (没有nio经验),不熟悉不同类型的频道、管道等等。
服务器应该像一样,像servlet请求/响应一样(比如,不是http或试图重建http ),对写入输出流的inputString做出反应,就像在代码片段中那样,并将一些字符串/字节写回输入流,就像代码片段中的那样,因此客户机才会继续前进。因此,连接应该保持打开,但也是同步的,客户端等待服务器的答复。如果我使用示例java教程中的“编写套接字服务器端”,我就能够让它对客户端起作用。但是我想利用网际网路中的线程处理等。
QuoteOfTheMomentServerHandler似乎是我想要的服务器端实现,但是这个设置能处理给定的客户端代码吗?
所以问题是,考虑到客户端的工作方式,应该使用哪种管道、通道或类似的东西?
同样,客户机和服务器也是存在的。我希望构建一个虚拟服务器实现来处理现有的客户端。
发布于 2012-05-09 06:34:41
Netty是一个TCP/IP框架。因此,是的,如果您正在开发TCP/IP服务器,则该工具包很适合使用。
我假设您在试图将客户端连接到服务器时出错。此外,服务器也应该正在运行。
当得到一个连接拒绝错误,有一对您的检查。第一个是服务器上的防火墙(如果有的话),允许连接到端口8080?其次,在客户端计算机上尝试打开到服务器的telnet会话,如下所示:
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的概念。
https://stackoverflow.com/questions/10517811
复制相似问题