私の問題は少し奇妙だと感じていますが、ここに行きます...
ソケットを使用してイーサネット経由でハードウェアに接続されたカメラと対話するC++プログラム(別の組織から)があります。表面的には、ソケットにメッセージを送信する最初の関数は次のとおりです。
char* cmd = "#TRGON\x0d";
m_pClient->Socket_Write( (BYTE*)cmd, strlen( cmd ));
コードを掘り下げて調べたところ、実際にデータを送信する最下位レベルの関数が見つかりました。
// Try to send what's in the buffer
int nFlags = 0;
int nSent = ::send( m_hSocket, (char*)m_pSendBuffer, m_nSendBufLen, nFlags );
...checking for errors, etc.
今、私が取り組んでいるプログラムは、Javaで書かれていることを除いて、同様のコマンドをカメラに送信する必要があります。私は一日中Javaソケットで遊んでいて、適切なアドレスに接続する以外の多くのことをカメラに実行させることができませんでした(LEDライトをトリガーするコマンドがあります)。
オンラインで調べてみると、この「送信」コマンドは、C++プログラムがカプセル化するWinsockライブラリからのものであることがわかりました。Javaでこれを行う同様の方法はありますか?または、JavaでDataOutputStreams、ソケットなどの正しい組み合わせを使用していないだけですか?私が見逃している「インポートウィンソック」はありますか(グーグルはそのようなものはないと言っているようです)?
助けてくれてありがとう。
編集:
コードが役立つかどうかは本当にわかりません!この時点で、私は基本的なことをしているだけです。接続して、それに書き込もうとしています。私はすべての組み合わせ、変換などを試したようです。これは単なるテストコードです(catchブロックのように、明らかに堅牢でも適切でもありません)。
InetAddress addr = null;
Socket sock = null;
ObjectInputStream in = null;
ObjectOutputStream out = null;
String msg = "#TRGON\\x0d";
try {
addr = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168,
(byte) 81, (byte) 58 });
sock = new Socket(addr, PORT);
out = new ObjectOutputStream(sock.getOutputStream());
out.writeBytes(msg);
in = new ObjectInputStream(sock.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
そこの最後の行、in =new...にぶら下がっています。まるでカメラからどのタイプの入力ストリームも取得していないかのようです。引き続き試してみることができますが、外部からのアドバイスをいただければ幸いです。