如何发送数据服务器(JAVA编写)到客户端(Node.js编写)
How to send data server (written in JAVA) to client (Written in 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()
可能会有所帮助,虽然这不会工作,如果你需要发送更多的数据以后。
解决方案
服务器端代码
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();
相关文章:
- 用于编写与我作为客户端查看的网页交互的脚本的术语(如果有的话)是什么
- 如何为输出Json对象的ajax调用编写客户端脚本
- 客户端编写|创建元素与.innerHTML编写|不可见代码
- 编写和下载文件客户端跨浏览器
- 如何在用HTML5编写的应用程序中访问客户端上的文件名
- 如何编写客户端Java脚本以在NodeJS服务器上运行
- 客户端上的异步JavaScript函数(如何编写回调)
- 我应该如何编写一个同时包含服务器端和客户端代码的node.js web应用程序
- 如何使用客户端语言(JavaScript)在SharePoint中编写/修改xml文件
- 为现有的客户端/服务器应用程序编写web客户端的建议
- 编写与客户端javascript和服务器端NodeJs模块一起工作的javascript代码
- 在asp.net中编写客户端代码
- 如何发送数据服务器(JAVA编写)到客户端(Node.js编写)
- 是否有可能只使用客户端web技术来编写社交网络?
- 连接到用c++编写的安全套接字服务器与用JavaScript编写的客户端
- 从客户端应用程序的webview控件中调用宿主应用程序中编写的c#调用javascript函数
- 用php编写一个客户端重定向服务器端
- 用python编写的类似javascript的TCP套接字客户端
- 用代码编写的Javascript在计时器运行完毕后不工作,当它有文档.在客户端准备好jquery方法
- 如何用javascript编写客户端api