私はJavaを使い慣れていませんが(このプロジェクトでは基本的にこのことを学んでいました)、XMLコマンドをサーバーに送信しようとしています私の研究室で)いくつかのデータを取得します。これを行うために、私はJavaプログラムを書いており、コマンドラインから実行しています。接続は正常に確立され、メッセージは正常に送信されていますが、「応答待ち」になっています。Javaを使用してTCP/IP経由でXMLを送信するレスポンスを受信していません
ここに私のJavaコードが参考になります。私はクライアント/サーバのTCPチュートリアルからこれを得て、それに応じてIP、ポート、および発信メッセージを調整しました。繰り返しますが、私はこれにはとても新しいので、どんな助けもありがとうございます。
// Java Socket Example - Client
import java.io.IOException; // Throws exception if there is an issue with input or output
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress; // This class represents an Internet Protocol address
import java.net.Socket;
import java.net.UnknownHostException;
/**
* This class implements java socket Client
*/
public class SocketClientExample {
\t public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException {
\t \t // get the localhostIP address, if server is running on some other IP, use that
\t \t System.out.println("Attempting connection to GE Reuter Stokes");
\t \t InetAddress host = InetAddress.getByName("10.212.160.4"); // IP GOES HERE
\t \t Socket socket = null; // start out as null, protocal
\t \t ObjectOutputStream oos = null; // This will change, just setting default
\t \t ObjectInputStream ois = null;
\t \t // establish the socket connection to the server
\t \t socket = new Socket("10.212.160.4", 3010); // 9876 is just the port number
\t \t System.out.println("Made it past Socket Initialization");
\t \t // write to socket using ObjectOutputStream
\t \t oos = new ObjectOutputStream(socket.getOutputStream()); // new instance of OOS that will write to the socket
\t \t System.out.println("Sending request to Socket Server");
\t \t // Initializing request string
\t \t String request = new String("0xF00041 " + "<Discovery><CommChannelName>Unknown</CommChannelName></Discovery>");
\t \t // In our version, this is where the XML script would go
\t \t oos.writeObject(request);
\t \t System.out.println("Request was sent. Awaiting response.");
\t \t // read the server response message
\t \t ois = new ObjectInputStream(socket.getInputStream());
\t \t // convert the response into a string
\t \t String message = (String) ois.readObject();
\t \t System.out.println("Message: " + message);
\t \t // close your resources
\t \t ois.close();
\t \t oos.close();
\t \t Thread.sleep(100);
\t }
}
これはセンサーで何か可能性がより多くのだ - 私はそれがコード上の目の第2のセットを持っていて損はないと考えました。
ルール:
は、(センサが要求と同様のヘッダ+ XML形式でレスポンスを返すと仮定して)の代わりにもっとこのような何かを試してください。このためのテストサーバーを作成し、取得したデータと関連するデバッグメッセージを出力します。この質問を結果と編集します。これには 'ServerSocket'を使います。 GoogleはServerSocketのドキュメントをアップ。新しいServerSocketを作成した後、 'Socket client = server.accept();'で接続を受け入れ、その 'client'の出力ストリームからデータを読み込み、それを出力して返信します。 – Aaron
'ObjectOutputStream'と' ObjectInputStream'は、この状況で使う正しい種類のストリームではなく、 'writeObject()'と 'readObject()'メソッドではありません。 'OutputStreamWriter'(その上に' BufferedWriter')または 'DataOutputStream'と' InputStreamReader'(その上に 'BufferedReader'を付けて)を使うべきです。 –
また、表現しようとしている '0xF00041 'は何ですか?あなたはあなたがそれを3-4バイトの整数ではなく8文字の文字列として送信していることを認識していますか?実際にあなたが送信するセンサーは何ですか?いくつかのプロトコルのドキュメントを提供できますか? –