(サーバーとクライアントを同じマシンで実行しているため、クライアントコードでlocalhostが使用されています)基本的に、このプログラムが行うことは、後でjsonに変換するクライアント側に文字列を送信することです。しかし、クライアント側での変換は私のエラーではありません。リクエストソケットから ObjectInputStreams (in) および ObjectOuputStreams(out) を続行すると、サーバー (ruby) に正常に接続した後、クライアント側 (Java) でそれが発生します....out = requestSocket.getOutputStream() は正常に動作しますが、 in = requesSocket.getInputStream() は私に IOException を与えます..すべてを試しましたが、まだこれを修正できません。PD: これは HW ではありません。異なる言語間の相互作用を学びたいと思って遊んでいるだけです。
これはクライアント側のエラーです:
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)
ルビーコード(サーバー)
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 CODE (クライアント) --->UPDATED
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();
}
}
}