【问题标题】:How to send data server (written in JAVA) to client (Written in Node.js)如何将数据服务器(用 JAVA 编写)发送到客户端(用 Node.js 编写)
【发布时间】:2014-06-09 04:16:19
【问题描述】:

我不知道这是否可能。首先我用 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');
});

【问题讨论】:

  • 我不明白您遇到了什么问题。 Node.js 客户端没有理由无法与 Java 服务器通信。当你尝试时发生了什么?为什么你认为你不能在这之间发送一个日期?
  • No no 在服务器端连接它时它只显示 ip:127.1.1.1( System.out.println("ip:"+socket.getInetAddress());) 之后没有任何显示
  • @user3553031 你能运行这个并对此提出任何建议。它对我真的很有帮助..

标签: java javascript node.js


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢您对此的评论。因为我发现了错误并纠正了这些事情,最终它可以工作了。
【解决方案2】:

这是解决方法

服务器端代码

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

public class MyServer {

public MyServer() {

}
public static void main(String args[]){
    ServerSocket serverSocket= null;
    Socket socket =null;
    BufferedReader datainputstream=null;

    try{
        serverSocket = new ServerSocket(8888);
        System.out.println("Listening ...");
    }catch(IOException e){
        e.printStackTrace();
    }
    try{
        socket = serverSocket.accept();

    }catch(IOException e){
            System.out.println("can't listen given port \n");
            System.exit(-1);
    }
    try{
        datainputstream = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        System.out.println("ip:"+socket.getInetAddress());
    }catch(IOException e){
            System.out.println("can't read File \n");
            System.exit(-1);
    }

        try{


            StringBuilder sb = new StringBuilder();
            String line = null;
            while((line=datainputstream.readLine())!=null){
                sb.append(line+"\n");
            }
            datainputstream.close();
            System.out.println("message:"+sb.toString());

        }catch(IOException e){

            System.out.println("Cant read file \n");
        }finally{
            if(socket!=null){
                try{
                    socket.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
            if(datainputstream!=null){
                try{
                    datainputstream.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }

        }

}



   }

这是我的客户

客户端代码

var net = require('net');
var client = net.connect(8888, 'localhost');
client.write('Hello from node.js');
client.end();

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多