java - 如何将数据服务器(用JAVA编写)发送到客户端(用Node.js编写)

标签 java javascript node.js

我不知道这是否可能。首先我用 Node.js 编写客户端和服务器,然后服务器和客户端都用 Java 编写,这些都按预期工作。现在我对连接 Java 服务器和 Node.js 客户端感兴趣。但问题是无法在他们之间发送日期

这是用 Java 编写的服务器端代码

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;


public class MyServer {

    public MyServer() {
    }
    public static void main(String args[]){
        ServerSocket serverSocket= null;
        Socket socket =null;
        DataInputStream datainputstream=null;
        DataOutputStream dataoutputstream=null;
        try{
            serverSocket = new ServerSocket(8888);
            System.out.println("Listening ...");
        }catch(IOException e){
            e.printStackTrace();
    }
    while(true){
        try{
            socket = serverSocket.accept();
            datainputstream = new DataInputStream(socket.getInputStream());
            dataoutputstream = new DataOutputStream(socket.getOutputStream());
            System.out.println("ip:"+socket.getInetAddress());
            System.out.println("message:"+datainputstream.readUTF());
            dataoutputstream.writeUTF("HELLO !");
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            if(socket!=null){
                try{
                    socket.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
            if(datainputstream!=null){
                try{
                    datainputstream.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
            if(dataoutputstream !=null){
                try{
                    dataoutputstream.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
        }
    }

}

这是用 Node.js 编写的客户端代码

 var net = require('net');
var HOST = '127.0.0.1';
var PORT = 8888;
var client = new net.Socket();
client.connect(PORT, HOST, function() {
        console.log('connected to: ' + HOST + ':' + PORT);
        client.write('Data comming from client...');

});
client.on('data', function(data) {
        console.log(data.toString());
        //client.destroy();
});
client.on('close', function() {
        console.log('Connection closed');
});

最佳答案

您的服务器(Java)在发送任何内容之前等待来自客户端的消息。它将阻塞,直到收到这样的消息。由于服务器似乎没有收到此消息,因此要么客户端实际上没有发送其消息(即,它正在排队直到收到更多要发送的数据),要么服务器期望接收更多数据。

DataInputStream.readUTF() 的文档声称它需要长度前缀的字符串。这不是您的客户所写的。服务器可能会将字符串的前两个字节解释为长度,然后尝试读取那么多字节的数据,由于没有那么多可用数据,因此它将等待客户端发送更多数据。尝试使用 BufferedReader.readLine() 代替,并确保您的客户端在其输出末尾发送换行符。

如果这不起作用,请尝试找到一种方法来刷新客户端的套接字。我不了解 Node.js,但快速浏览一下文档表明 socket.end() 可能会有所帮助,尽管如果您稍后需要发送更多数据,这将不起作用。

关于java - 如何将数据服务器(用JAVA编写)发送到客户端(用Node.js编写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113604/

相关文章:

javascript - 在 React 组件上使用 CSSTransitionGroup 会出错

javascript - 使用 Mocha 测试数组的断言错误

javascript - JSONStream 的基本测试不起作用

java - 推特提要 API

javascript - 如何更改 Phonegaps 条码扫描仪插件的外观

Java 对象返回类型与通用方法

node.js - 在 Node.js 中操作从数据库中获取的数字的最佳/最合适的方法

java - 如何确定扩展抽象类的对象的类

javascript - 如何导入 socket.io npm 包 - Node Js

javascript - AngularJS 按代码过滤