如何将数据服务器(用JAVA编写)发送到客户端(用Node.js编写)
我不知道这是否可能。首先,我在Node.js中编写了客户端和服务器,然后服务器和客户端都用Java编写,它们按照预期工作。现在我对连接Java服务器和Node.js客户端感兴趣。但问题是他们之间不能发送日期 这是用Java编写的服务器端代码如何将数据服务器(用JAVA编写)发送到客户端(用Node.js编写),java,javascript,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
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()
可能会有所帮助,尽管如果以后需要发送更多数据,这将不起作用。下面是解决方法
服务器端代码
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();
我不明白你有什么问题。Node.js客户端没有理由无法与Java服务器通信;当你尝试时发生了什么?为什么你们认为你们不能在这段时间内发送一个日期?不,不,当在服务器端连接它时,它只显示ip:127.1.1.1(System.out.println(“ip:+socket.getInetAddress());)之后什么也看不到that@user3553031你能运行这个并给出任何建议吗?这对我真的很有帮助。非常感谢你对这个的评论。因为我发现了错误并纠正了这些事情,最终它成功了。