【问题标题】:Combining Java and Node.js through Sockets通过 Socket 结合 Java 和 Node.js
【发布时间】:2015-10-18 21:01:51
【问题描述】:

我有以下 Node.js 代码:

var http = require('http');

http.createServer(function(req, res)) {
    console.log("URL request"+req.url);
    res.writeHead(200, {'Content-Type':'text/plain'});
    res.end('Hello World\n');
}).listen(9898, '127.0.0.1');

console.log('Server locally running at http://127.0.0.1:9898/');

我正在使用 Java 中的 Socket 类来创建一个也连接到端口 9898 的套接字。我希望 Node.js 写入的任何内容(在本例中为“Hello World”)都由 Java 类处理。到目前为止,这就是我所拥有的 Java 类:

Socket s = new Socket(serverAddress, 9898);
BufferedReader input =
        new BufferedReader(new InputStreamReader(s.getInputStream()));

我的问题是如何让 Java 代码读取“Hello World”,这样每当我调用 System.out.println(input.readLine()) 时,它就会打印“Hello World”?

【问题讨论】:

  • 有什么问题?它无法连接或连接但它没有读取任何内容?另外,你不需要写res.writeHead(200, {'Content-Type':'text/plain'});,因为你只是在 TCP 层打开了一个原始套接字,所以那里不需要 HTTP 代码。
  • 嗨。我对java不熟悉,但从节点方面来看,你可能想要某种在联系时响应hello world的webservice?在这种情况下,您可以让 java 访问节点服务器正在运行的 URL:端口以获取结果。我的方法不使用 websocket 连接。 websocket 连接对您的工作至关重要吗?特别是因为在示例中您使用的是 localhost,这意味着不会有网络延迟。
  • @Darken 是的,Java 代码没有读取任何内容。它不在控制台中打印“Hello World”?为什么。但是当我停止服务器(在端口上运行)时,控制台上会写入“null”。感谢您的帮助
  • @X0r0N 是的,Web 套接字对我的工作并不重要。到目前为止,我希望这个项目能够在本地工作(所以我可以测试它)。你的方法是什么?感谢您的帮助
  • 你的 node.js 服务器是一个 http 服务器。这意味着当你连接到它并从 Java 发出请求时,你必须发送一个 HTTP 请求,而不仅仅是打开一个套接字并读取。我个人不了解 Java,但我很确定它有用于发送 HTTP 请求的类,可以用几行代码为您完成此操作。

标签: javascript java node.js sockets


【解决方案1】:

您在第三行有一个额外的 ')',但您的代码似乎可以正常工作:

var http = require('http');

http.createServer(function(req, res) {
    console.log("URL request"+req.url);
    res.writeHead(200, {'Content-Type':'text/plain'});
    res.end('Hello World\n');
}).listen(9898, '127.0.0.1');

console.log('Server locally running at http://127.0.0.1:9898/');

我猜你需要创建一些 java 功能来向节点服务器运行的 url:port 发出 http 请求。它可能不会像“input.readLine()”那么简单。

也许这样的事情将有助于获取 java 代码以从节点获取数据:

How can I get an http response body as a string in Java?

【讨论】:

  • 我正在制作网络应用程序。在这个应用程序中,用户输入了一些东西。这个字符串(用户输入的)需要被发送到一个可以处理输入的java类,然后把它发送回javascript,它会在屏幕上发布。我在 JavaScript 和 Java 之间选择的是 node.js。最好的方法是什么?我需要对 Node.js 代码进行哪些更改才能完成我想做的事情。我是 Node.js(以及 java)的初学者,因此感谢您提供任何帮助
猜你喜欢
  • 2014-04-23
  • 2018-06-28
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多