• ベストアンサー

現在、javaでプログラムを書いておりその際に独自のクラス型データをソ

現在、javaでプログラムを書いておりその際に独自のクラス型データをソケット通信 で送受信したいと考えています。 しかし、シリアライズを使うと別のマシーン間での送受信ができないようでした。 JavaRMIを使わずにTCPやUDPで独自のクラス型データを送受信する方法はあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

クラスCのオブジェクトをシリアライズしてマシンXからマシンYへ送るとします。そのような場合、XのクラスパスにCが入っているのは当然ですが、Y側のクラスパスにもCが入っている必要があります。 受信側のクラスパスにクラスCがなくてもデータを受け取って解釈したいということでしょうか? もっと低レベルな形で通信データをやりとりするのであれば、DataOutputStreamとByteArrayOutputStreamを使って書き出したbyte配列データを送信し、受信側ではそれをDataInputStreamとByteArrayInputStreamを使って読み出す方法もあります。ただし、どんなデータが送られてくるのかを受信側が知っている必要があることには変わりありません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

> シリアライズを使うと別のマシーン間での送受信ができないようでした。 そう思った理由を書いてみてください。

makao0123
質問者

補足

回答ありがとうございます。 > シリアライズを使うと別のマシーン間での送受信ができないようでした。 こう思った理由ですが、シリアライズでは復元の際に送信時のクラス型を用いる必要があり 送信と受信が別のマシーンである場合、受信側に送信側のクラス型をどのように伝えるのか が分からなかったからです。 知識不足で理解できていないこともあると思いますのでよろしくご教示ください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • UDPの接続って?

    Linuxとgccでプログラムしているのですが、 UDPによるデータ送受信で悩んでいます。 (すいません、前回も同じようなこと言いましたね(^^;) TCPであれば、サーバ側は 1.ソケット生成 2.バインド クライアント側は 1.ソケット生成 2.コネクト で通信路が確立されますよね。 UDPはどうなるんでしょうか。コネクションを張らないということは、サーバとクライアントは区別しないんですか? 今現在、TCPのプログラムのSOCK_STREAMとIPROTO_TCPの部分だけをUDPにして実行しているのですが、UDPのくせに Connectとかやってて気分が良くないのです・・・。(笑) 現在は、SetupForClient(サーバ側)とConnectToServer(クライアント側)というTCPの接続関数をそのまま使っています。前者はいいのですが、後者は明らかにUDP向けではないですよね。 もし、クライアント側の例があったら、教えていただければ嬉しく思います。

  • JavaのSocketで、データを送ったのに応答が

    JavaのSocketで、データを送ったのに応答がありません。 iPod touchで、データを送ったらオウム返しのように送られてきたデータをそのまま返すプログラムを実行しました。 パソコンのJavaでソケット通信を行い、接続とウェルカム文は表示できました。 しかし、データを送ったのに帰ってきません。 おかしいので、telnetで確認したところ、うまく作動しました。 となると、telnetではうまくいき、javaのソケットではうまくいかない…javaが原因と思います。 telnetとjavaのソケットとでは、何か違いがありますか? javaでは、入力された文字列をそのまま送信しています。エンコードや何かが必要ですか?

    • ベストアンサー
    • Java
  • javaのUDP受信プログラムについて

    UDPで数値データを受信してある処理をしようと考えております。 そこで↓のページで公開されている受信プログラムを使用してデータを受信しました。 http://news.mynavi.jp/column/java/052/index.html import java.net.*; public class UDPServer { public static void main(String[] argv) throws Exception { // 5100番ポートを監視するUDPソケットを生成 DatagramSocket receiveSocket = new DatagramSocket(5100); // 受け付けるデータバッファとUDPパケットを作成 byte receiveBuffer[] = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length); while (true) { // UDPパケットを受信 receiveSocket.receive(receivePacket); // 受信したデータを標準出力へ出力 System.out.println (new String(receivePacket.getData(), 0, receivePacket.getLength())); } } } 別のプログラムから「50」という数値を送信し、上記のプログラムで受信すると、勝手にASCIIコードに変換されてしまっているようで、ASCIIコードの10進数の50にあたる「2」が出力されてしまいます。 これをASCIIコードに変換せずに、表示させる方法を教えて下さい。 もしくは、受信データをバイナリで表示する方法があれば、そちらも教えていただけるとありがたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaでのプログラムについて

    私は現在Javaプログラムについて学習を行っております。 今行っているのがクラス図をみてそこからJavaのプログラムになおすという作業なのですがどこから進めていったらよいのかまったくわかりません。 なにかコツやどこからみていったらよい等ありましたら教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • プロトコル間のデータ通信はどうやって?

    ネットワークについて関心があります。 プロトコル間のデータ通信はどうやって行われているので しょうか? (以下は間違いを含んでいるかもしれませんが、 説明となります) TCP/IPを使用して、インターネットを利用します。 送信する場合は、まずsocketを利用して、TCP、もしくはUDPに データを渡します。 ☆この時点で、ひとつ疑問なのは、TCPならば、TCPという名前の プログラムが存在しているのでしょうか? そして、適切なヘッダ、トレーラ(付いたかは自信がない)が くっ付けられて、それがIPにわたされる。 またそれが、PPPに渡される。そして、デバイスドライバに 渡される。 といった具合に、どんどんデータが包まれているわけですが、 その際のデータの受け渡し方法はどのようなものなのでしょうか? 上で質問した、TCPならばTCPという名前(これがそのまま名前じゃ ないかもしれませんが)のプログラムが存在する。という認識が あっているとすれば、IPという名前のプログラムが存在して、 PPPという名前のプログラムが存在して、そのそれぞれのプログラム間 でデータ通信を行っているはずです。プロセス間通信だから、 ソケットなのか、名前つきパイプなのか、共有メモリなのか、、 そこが気になります。 OSの機能の内部構造に関わるものだからか、 この話題についてプログラムの構造の観点から、記述された ものを見たことがありません。 宜しくお願いいたします。

  • クラス間でのデータ参照

    あるクラスでArrayListにデータを格納し、そのデータを別のクラスで使いたいと思っています。 Javaでそれをするために、どのようにすればよいのでしょうか? 何か知識がある方教えてください。

    • ベストアンサー
    • Java
  • JAVAにFTP転送をサポートしているクラスはありますか

    この度、JAVAでFTP送信を行うプログラムを開発することになりました。私自身がプログラムを開発する訳ではありません。又、私自身はJAVAについてはよく知りません。というのが前提です。 指定されたファイルを指定されたIPアドレスへFTP送信するプログラムをJAVAで作る場合、FTP送信をサポートしているクラスはJAVAにあるのでしょうか。イメージとしては、そのクラスを呼び出して、FTPコマンドのPUTコマンドに相当するようなメソッドを呼び出せれば良いと考えています。又、転送エラーが発生した場合のエラーのハンドリングは必須です。ちなみに、C言語では、私が調査した結果では、そのようなクラス(API)はないので、ソケットライブラリでFTPプロトコルに従って一からの作り込みとなります。本件の質問の意図はJAVAでFTP転送のプログラムを開発する時の作業量を見積もっておきたい為です。(FTP転送のクラスがあれば、簡単に開発できるが、なければそれなりの作業量が発生すると考えています)

    • ベストアンサー
    • Java
  • IEEE802.3通信

    初心者で申し訳ありません。 ご教授お願いいたします。 VCでソケット通信を行うとTCP/IP UDP/IPプロトコルの情報が付加されます。 それをしない方法? もしくはソケット通信ではなくイーサネット通信を行う方法がわかりません。 質問の文にも間違いがあるかもしれませんが、よろしくお願いいたします。

  • JAVAでノンブロッキングモードでの通信はできますか。

    このたび、JAVAでTCP/IPプロトコルの通信を行うことになりました。今までは、UNIXでC言語で開発してきたのですが、その場合は、ノンブロッキングモードを使用してプログラムを作成しました。JAVAで、ノンブロッキングモードで通信することは、可能なのでしょうか。又、可能であれば、その方法は、ソケットオプションの設定で行うのでしょうか。

    • ベストアンサー
    • Java
  • javaによるソケット通信

    こんばんわ. 現在悩んでいる事があります. あるプログラムと別のプログラム同士で通信を行い互いに影響を与えるようなプログラムは作成可能でしょうか. 例えば,一元的に全体を管理するコントローラがあり,コントローラからの命令で別のプログラムが動作する,コントローラはそのプログラムが動作中であることを知ることができる,といったプログラムを作成したいと思っています. これらを別のプロセス(hello.javaとworld.javaのように)で行いたいと考えています. こういったことはjavaによるソケット通信で行えるのでしょうか. 行えるのならどのように行えばいいのでしょうか?私の考えでは.ソケット通信でやるなら,コントローラがクライアントでその下に位置するプログラムがサーバということになると思いますが・・いまいちよくわかりません. ご存知の方がおられましたらご教授お願いいたします.