(运行服务器和同一台计算机上的客户端,因此本地主机是在客户端代码中使用) 基本上我有这个程序做什么是发送一个字符串到客户端,他将后来转换为json。但客户端部分的转换不是我的错误。它在客户端(Java)后,我成功地连接到我的服务器(红宝石)时,我从我的请求套接字进行ObjectInputStreams()和ObjectOuputStreams(出).... out = requestSocket.getOutputStream()工作正常,但in = requesSocket.getInputStream()给了我一个IOException ..虽然我尝试了一切,但我还无法解决这个任何帮助表示赞赏。 PD:这不是一个硬件,只是我玩耍时想学习不同语言之间的互动。红宝石(服务器) - 爪哇(客户端)连接错误
这是在客户端的错误:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
Ruby代码(服务器)
require 'rubygems'
require 'socket'
require 'json'
jsonString = '{"test":23, "prueba":1234}'
serverB = TCPServer.new(2000)
loop{#server runs forever
Thread.start(serverB.accept) do |client|
client.write(jsonString)
client.close #disconnect from the client
end
}
Java代码(客户端)--->更新的
import java.io.*;
import java.net.*;
import org.json.simple.*;
public class json
{
public static void main(String[] args) throws InterruptedException, ClassNotFoundException
{
Socket requestSocket;
ObjectOutputStream out;
ObjectInputStream in;
try {
//creating a socket to connect to the server
requestSocket = new Socket("localhost",2000);
//Get input and output streams
out = new ObjectOutputStream(requestSocket.getOutputStream());
out.flush();
//THIS WORKS NOW
BufferedReader in = new BufferedReader(new InputStreamReader(requestSocket.getInputStream()));
//THIS IS WHERE IT FAILS NOW
String jsonString = in.readLine();
String msg = JSONValue.toJSONString(jsonString);
//Convert string to JSON format and print something
Object obj = JSONValue.parse(msg);
JSONObject jobj = (JSONObject)obj;
System.out.print(jobj.get("test"));
try {
in.close();
out.close();
requestSocket.close();
} catch (Exception e2) {
e2.printStackTrace();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
}
我不知道Java的那么好,但对我来说,似乎您使用的是Java'ObjectStream'元读取从插座普通字符串。我会认为一个Java ObjectStream只能与另一个ObjectStream进行通信。即你只能在这样的流内传递Java对象。一个普通的Ruby字符串不是一个Java对象,所以代码永远不会像这样互操作。你也需要在Java端阅读纯字符串,而不是'ObjectStream'。 – Casper
基本上在Java端调用'requestSocket.read()'(我猜是因为我不是Java大师)。跳过所有'流'的东西。 – Casper
再次,阅读是没有问题的,我在这种情况下,因为我还没有得到通过requestSocket.getInputStream()部分... – richddr