• 締切済み

SocketでXMLオブジェクトを送信したい

Bonjinの回答

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

何をもってXMLオブジェクトと言っているかわかりませんが、オブジェクトを送受信するならObjectOutputStreamとObjectInputStreamが使えたりします。

noname#10667
質問者

お礼

すいません。 XMLファイル、ということです。 (実は、FLASHのXMLSocketを使いたいのですが、 これが、XMLのデータのやり取りしか出来ないので、 おそらく、XMLファイルを送れ、ということだと、 思うのです。)

noname#10667
質問者

補足

すいません。ちょっと訂正します。 JAVAで、XMLファイルを、送受信する方法が知りたいの で、分かる人がいましたら、お願いします。

関連するQ&A

  • Socket + XML

    ・クライアントはサーバへXML形式のクエリを送信し、 ・サーバからXML形式のデータを受け取る という単純なプログラムを実装しています。 しかしサーバ側の、InputStreamを引数とするXMLパースメソッドでwaitしてしまって困っています。 かといって、クライアント側のOutputStreamを閉じると、クライアントのソケット自体も閉じてしまいます。 なるべく一度のコネクションで送受信を終了させたいのですが、よい方法はないでしょうか? 一応、BufferedReaderを利用してXML文章を文字列に落としてから StringReaderをbuilder.parseの引数に与えることで解決出来てはいるのですがスマートではない気がしまして。 [Server側]  ServerSocket server_sock = new ServerSocket(12345);  Socket sock = server_sock.accept();  /* XMLパーサビルダ生成 */  DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();  DocumentBuilder builder = fact.newDocumentBuilder();  /* ドキュメント docIn の解析 */  Document docIn = builder.parse(sock.getInputStream());//ここから動かない(clientがoutputを終了するまで待っている?)  (略)  /* 結果ドキュメント docOut の構築*/  Document docOut = builder.newDocument();  (略)  /* docOut 送信 */  TransformerFactory tfactory = TransformerFactory.newInstance();  Transformer transformer = tfactory.newTransformer();  transformer.transform(new DOMSource(docOut), new StreamResult(sock.getOutputStream()));  sock.getInputStream().close();  sock.getOutputStream().close();  sock.close(); [Client側]  Socket sock = new Socket("localhost", 12345);  /* XMLパーサビルダ生成 */  DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();  DocumentBuilder builder = fact.newDocumentBuilder();  /* クエリドキュメント docOut の構築*/  Document docOut = builder.newDocument();  (略)  /* docOut 送信 */  TransformerFactory tfactory = TransformerFactory.newInstance();  Transformer transformer = tfactory.newTransformer();  transformer.transform(new DOMSource(docOut), new StreamResult(sock.getOutputStream()));  sock.getOutputStream().flush();  //sock.getOutputSream().close();//これにすると、socketが閉じてしまう  /* 結果ドキュメント docIn の解析 */  Document docIn = builder.parse(sock.getInputStream());//サーバから結果が送信されないので、クライアントはここで停止  (略)

    • ベストアンサー
    • Java
  • 文字化けします。

    お世話になります。 ソケットでサーバとクライアントを接続しています。 コーディングの概略は次の通りです。 【クライアント】 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"EUC_JP")); out.println("かきくけこ"); System.out.println(in.readLine()); 【サーバ】 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"Shift_JIS")); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); out.println(inputLine); //←これはクライアントでも文字化けしない。 String s1 = "あいうえお"; String u1 = new String(s1.getBytes("xxxxx"), "yyyyy"); out.println(u1); //←文字化けする。 } お伺いしたいのは文字コード変換についてです。 サーバ:RedhatLinux クライアント:Windowsでして、 サーバ側コーディングの String s1 = "あいうえお"; としている文字列を クライアント側の // 読み込んだデータを表示 System.out.println(in.readLine()); で表示したいのですが、文字が化けて(????←このようになります)困っています。 文字コード変換しなければいけないと思うのですが、 getBytesを使うのでしょうか? もしgetBytesを使うならどのように書けばいいのかがわかりません。 分かりにくい説明で申し訳ありませんが、 ご教授ください。宜しくお願いします。

    • ベストアンサー
    • Java
  • オブジェクト指向で分からないことが。

    オブジェクト指向で分からないことが。 1.クラスAから、文字列引数を指定して、クラスBがインスタンス化されたオブジェクトを取得する。 (getInstance的メソッド)引数の文字列にマッピングされたオブジェクトを取得する感じ。 2.1.で取得したオブジェクトから、各オブジェクトを取得するメソッドを呼び出し、オブジェクトを取得する。(仮にクラスC) 3.2.で取得したクラスCのメソッドを呼び出す。 このとき、クラスCのメソッド内で、1.で利用された引数を利用したいです。 そもそもクラスCは、1.を経てしか取得されないものの為、再度1.の引数を渡したくありません。 内部的な値なので、スコープpublicのセッターを用意して、クラスA内からの書き換えが出来ては困ります。 こういう場合、どういうクラス設計を行えば良いのでしょうか?

    • ベストアンサー
    • Java
  • jqueryでXML内テキストをオブジェクトに

    XML内のテキストをオブジェクトのコンストラクタの引数に渡すことはできますか? 例:(これではできませんでした。) -------------------------------------------------------------- ffdata.xml <?xml version="1.0" encoding="UTF-8" ?> <ffdata> <chardef><!--キャラ登場時のステ(name,hp,mp,str,fig,tec,agi,int,mnd)--> <ch1>アラゴルン,400,80,10,7,8,10,6,6</ch1> </chardef> </ffdata> -------------------------------------------------------------- main.html <script> //************************************************オブジェクト function charctor(name,hp,mp,str,fig,tec,agi,int,mnd){ this.name= name; this.hp = hp; this.mp = mp; this.str = str; this.fig = fig; this.tec = tec; this.agi = agi; this.int = int; this.mnd = mnd; } //************************************************ffdata.xmlファイルを読み込み $(document).ready(function(){ $.ajax({ type: "GET", url: "ffdata.xml", dataType: "xml", success: function(xml) { createObj(xml);}, error: function(){alert("xmlファイルの読み込みに失敗しました");} }); }); //************************************************オブジェクト作成 function createObj(xml){ aragorn = new charctor($(xml).find("chardef").find("ch1").text()); $("#main").html(aragorn.str);//************************#main内に表示 } </script> <body id="main"> </body> ------------------------------------------------------------- 思いつきでやってうまく行かなかったんですが、何か出来そうな気がするんです。 間違いがあったら指摘していたけると助かります。

  • Socket通信でのデータの受け渡し

    サーバーが受けたデータを、クライアントに返す プログラムですが、 サーバーは、クライアントからのデータを、 while(true){ BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); str=br.readLine(); if(str!=null){ PrintWriter pr=new PrintWriter(s.getOutputStream()); pr.println(str); pr.flush(); }}で、返すようにしています。 クライアントも大体同じです(PrintWriterは、 Buttonを押した時に、取得しています)。 考え方としては、inputstreamは、無限ループで、 取得し、outputstreamは、必要におうじて、取得し データを送っています。 しかし、これだと、一度データを送ると、次から データの受け渡しが出来なくなります。 socketか、inputstreamかoutputstreamのどれかが、 閉じるか、使えなくなるのだと思いますが、 いつもここで、悩んでいます。 (また、無限ループで、BufferedReaderオブジェクト をつくり続けるというのも、ちょっと不安)。 どこに問題があるのか、分かる人教えてください。 お願いします。

    • ベストアンサー
    • Java
  • Java ファイルオブジェクトでなく文字列オブジェクト?

    JavaでXMLをパースするプログラムを初めて試しています。 parseメソッドの第一引数がファイルオブジェクトなのですが、これをメモリ(文字列)オブジェクトを与えて同じ動作させるものはあるのでしょうか? // SAXパーサーファクトリを生成 SAXParserFactory spfactory = SAXParserFactory.newInstance(); // SAXパーサーを生成 SAXParser parser = spfactory.newSAXParser(); // XMLファイルを指定されたデフォルトハンドラーで処理します parser.parse(new File("helloworld.xml"), new InsXMLParser()); ※このように String str = "<xml? ......"; parser.XXXXXX(str, new InsXMLParser

    • ベストアンサー
    • XML
  • 0バイトの送信

    PrintWriterで終端0バイトになるように送信 したいのですが、疑問があります。 myprintwriter.println("こんにちは\0"); だと、うまくいかないのですが、 myprintwriter.println("こんにちは\0"); myprintwriter.flush(); と、flush()をつけるとうまくいきます。 このflush()はどういう意味なのでしょうか。 ついでですが、printlnだと、最後に改行がつき、 0バイトにならないような気もするのですが、 なぜ、大丈夫なのでしょうか。 なにか分かる人、お願いします。

    • ベストアンサー
    • Java
  • replaceChildメソッドについて

    XMLの扱いがわからなくて困っています。 javaでXMLのノードを変える、例えば、 jspの画面で要素ノードとテキスト名(要素ノードの内容)を入力して 送信ボタンを押したら、要素ノードでノード検索をしてそのテキスト名を 変更するという処理をする場合、replaceChildメソッドを使うのかと 思ったんですが、replaceChildメソッドだと、「既存のノード」しか 置き換えれなくて文字列が指定できません。 この場合、文字列をノードに変換するメソッドがあるのか、それとも 他に方法があるのか教えていただけないでしょうか。 お願いします。 よろしくお願いします。

    • ベストアンサー
    • XML
  • インスタンスNameを文字列で表現するには?

    Object State; public static final Object PLAY=new Object(); public static final Object STOP=new Object(); Sateを操作するメソッド(); : : System.out.println(Object.Stateの文字列表現); としたいのですが、ObjectインスタンスであるPLAYやSTOPをprintlnメソッドで文字列として表現させるにはどうすればいいのでしょうか?コンソールにPLAY,STOPと表示させたいのですが、そのままprintln(State)とすると訳の分からない文字(→java.lang.Object@239137)が出てきます。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • ストリング文字列をDocumentオブジェクトに格納したい

    文字列として受け取ったxmlをDocumentオブジェクトに格納したいと考えて DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(ファイルパス); とすればファイルを取得してDocumentオブジェクトに入れることはできたのですが、ファイルパスではなくString文字列としてxmlを受け取った場合、どのようにすればDocumentオブジェクトに格納できるのかわかりません。 どのようにすればよろしいのでしょうか?

    • ベストアンサー
    • Java