No.5ベストアンサー
- 回答日時:
こんにちわ。
私も2月前半に同じようなものを作ったのですが、やはりうまくいかず悩んでました。
私の場合は、リアルタイムチャットを作りました。クライアントにFlash、サーバにJavaを使用しました。
Javaで作ったサーバが正しく機能するか確認するには、Telnetが便利だと思います。Windowsのコマンドプロンプトから
>telnet localhost 10000
こんな感じで、Javaで作ったサーバが稼働しているポートを指定して接続してみてください。
Telnetの方に、XMLオブジェクト?(というより、XMLで記述された文字列だと思いますが)が、返ってくるようなら、Javaのサーバは正常に稼働していると思います。
で、Flashの方ですが、
myXMLSock = new XMLSocket();
myXMLSock.connect(null,10000);
と、してコネクションの確立をしてみてください。
connectの第一引数は、Flashでのプレビューによるデバッグ時は、
"localhost"
で、ブラウザでデバッグする場合や友達に見てもらう場合は、
null
でないとうまく作動しませんでした。
で、ちゃんとFlashが受け取っているかは
myXMLSock.onData = function( msg ){
trace(msg);
}
onDataというイベントハンドラは、XMLだろうがなんだろうが、なにか値を受け取ると作動するようで、受け取った値を、上の例では msg に入れて使う事ができます。
私の場合は、クライアントの誰かが文字列を送信すると、接続されているすべてのクライアントに送られてきた文字列をばらまいたり、誰かがログインするとJavaで作ったサーバでXMLの文字列を作成してやはり他のクライアントにばらまくといった感じで動作します。
興味があれば、おみせします。
回答ありがとうございます。
telnetでも、onConnectでも接続は、大丈夫そうです。
確認があります。
JAVAのサーバーは、ServerSocketを使うので
いいのでしょうか。
また、送信は、
PrintWtiter out=new PrintWriter(sock.getOutputStream());
out.println("xml");
でいいのでしょうか。
送信は、onDataを使う限りは、xmlである必要は
ないのでしょうか。
この点で、問題があれば教えてください。
(せっかくですので、よろしければアドレスでも教えて
ください。どんなことが出来るのか、見てみたいです)。
No.6
- 回答日時:
一応、私は趣味でJava歴1ヶ月、ActionScript歴1.5ヶ月なので正しいかどうかは自信がありませんが・・・。
えっと、「telnetでも、onConnectでも接続は、大丈夫そうです。確認があります。」と、いうことですが、こういう理解でよろしいでしょうか。
FlashからJavaで作ったサーバ(以後Javaサーバと略します)にXML形式の文字列は送信できて、Javaサーバも受け取っている。
で、Javaサーバから送られてきた文字列はonConnectイベントハンドラでは抽出することができるが、XMLオブジェとしてうまく受け取れない。
こんな感じでしょうか。
おそらく、そうでしたらFlash側の問題となります。で、この場合は受け取ってはいるもののうまくXMLオブジェとして扱えてないのではないでしょうか。
mySocket = new XMLSocket();
mySocket.allowDomain();
mySocket.onXML = getXML;
function getXML( recXML){
trace( recXML );
}
これで、表示されるか試してみてください。
「また、送信は、
PrintWtiter out=new PrintWriter(sock.getOutputStream());
out.println("xml");
でいいのでしょうか。」
これについては、私は今まで趣味でPHPやPerlや、1ヶ月ほどならC言語もやったことありますが、他の言語をやっているのなら、出力は print でやった方が違和感がない。と、いうのなら PrintWriterクラスを使って、なれてきたら処理にあった方を使うようにする。と、いうのでよいと思います。
PrintWriterクラスの方が、Stringクラスのオブジェを引数として扱えるメソッド(printメソッドとか)が多いようなので、サーバ側で受け取った値を Stringオブジェにして加工やらチェックやらした場合は、楽かもしれませんね。
ちなみに、私は、
OutputStreamクラスを使っていますが・・・。
で、Javaサーバの方は、「ServerSocket」でいいと思います。(もっといいクラスってあるんですかね(^ ^ ;ゞ)
onConnectイベントハンドラで確かに、XMLでなくてもサーバから返ってきた値を受け取ることができますが、FlashからはXMLオブジェにしないと送信できないようです。もし、これでやるとしたら
onConnectで受け取る⇒処理⇒XMLオブジェクトに加工⇒送信
って感じになります。
お世話になりました。
送信できました。
いろいろ調べたところ、0バイトで終わるデータを
送る、ということだったので、送信テキストの
最後に、\0をつけたところ、送信ができました。
(ptintlnで送信し、onXMLでも、onDataでも取り出せ
ます)。
これで、FCSを使わずに、サーバーができます。
ありがとうございました。
No.4
- 回答日時:
Server側からデータがこないとのことですが、Javaで指定したPortNoに接続して、データがきてるかどうかを確認してください。
たとえば、
ServerSocket new ServerSocket(PortNo);
このようにコーディングしていたとします。
PROMPT>telnet ServerHostName PortNo
このようにコマンドを入力してください。
“<?xml ~><name></name>”が表示されますか?
また、FLASHに送るXMLはどんな形式でも良いのでしょうか?文字コードなども気になるのですが…
ただし『のデータはくるんです』とのことですから、
Socketはつながってるのですよね?
もしかすると、flush()を行えば送信されるかもしれません。
また、PrintWriterを使うのはXMLSocketの流儀ですか?
No2ではあまり深く考えていませんでしたが、
普通Socketで電文を送信する場合は、
PrintWriter out = new PrintWriter(socket.getOutputStream());
よりも、
OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());
の方が一般的だと思います。
もちろん、送信も、println()よりも、write() が一般的だと思います。
参考URL:http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
No.3
- 回答日時:
少し気になったので、XMLSocketを検索したのですが、
FlashMX用汎用ソケットサーバー(GPSS)これを使うと
下記のようなコードでクライアントとの通信が可能とのことです。
package jp.wda.gpss.samples.chap1;
import jp.wda.gpss.GeneralSocklet;
import jp.wda.gpss.SocketProcessor;
public class HelloWorld extends GeneralSocklet {
public boolean checkConnection(SocketProcessor client) {
client.send("Hello! World.");
return true;
}
public void preRemoveClient(SocketProcessor client) {
sendToAllClients("A client went away...");
return;
}
public boolean doCommand(SocketProcessor client, String command) {
sendToAllClients(command);
return true;
}
}
上記コードは下記URLより引用しました。
http://www.geocities.co.jp/SiliconValley-PaloAlt …
参考URL:http://www.geocities.co.jp/SiliconValley-PaloAlt …
回答ありがとうございます。
No.2の書き方で、できそうなのですが、
データがFLASHに送られません(FLASHのデータは
くるんですけど)。
上のサイトは、何度も見ていますが、サーバー側の
記載がよく分からないのです(サーバーも自力で作り
たいので)。もう少しがんばってみます。
No.2
- 回答日時:
FLASHとのことですので、Socket通信をする上ではJavaがServer側になるとのことですね。
ということは、
import java.io.*;
import java.net.*;
: (中略)
public void run() {
ServerSocket new ServerSocket(FLASHは何番を使うの?);
Socket socket = server.accept();
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.print("<?xml ~><name></name>");
:(後略 FLASHからの受信データとかもあるよね)
こんな感じので良いと思うのですが…
また、FLASH用のライブラリなどはのでしょうか?
No.1
- 回答日時:
何をもってXMLオブジェクトと言っているかわかりませんが、オブジェクトを送受信するならObjectOutputStreamとObjectInputStreamが使えたりします。
この回答への補足
すいません。ちょっと訂正します。
JAVAで、XMLファイルを、送受信する方法が知りたいの
で、分かる人がいましたら、お願いします。
すいません。
XMLファイル、ということです。
(実は、FLASHのXMLSocketを使いたいのですが、
これが、XMLのデータのやり取りしか出来ないので、
おそらく、XMLファイルを送れ、ということだと、
思うのです。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- XML Windowsで見かけるxmlファイルってどういうものですか? 1 2022/06/03 14:57
- XML iPhoneでXMLファイルを開くにはどうしたら良いのでしょうか? 1 2022/09/05 18:00
- 数学 この数学問題、スマートに解く方法を教えてください。 3 2023/01/26 23:17
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでの[]
-
servletからjspへオブジェクト...
-
エクセルVBA 画像を貼り付ける...
-
JSPでのArrayListの表示につい...
-
エクセルVBA/SpecialCellsで特...
-
C#で親にイベントを投げる方法
-
JTableで値を右寄せ表示する方法
-
サーブレットコンテキストの意...
-
Smartyでのエラー
-
C++/CLIでの画像情報(RGB)の取得
-
Objectクラスのオブジェクトを...
-
MessageBox.Show(Me,…の「Me」...
-
VB.netでメソッドからコントロ...
-
vectorの内容をString型に変換...
-
引数のないhasOwnProperty
-
Excel VBA 定数にオブジェクト...
-
C#でのExcel操作について.(Ran...
-
System.Collections.SortedList
-
エクセルVBAで、条件に一致する...
-
private static という変数の修飾
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでの[]
-
エクセルVBA 画像を貼り付ける...
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
Vba ListViewの行挿入に関して...
-
Excel VBA 定数にオブジェクト...
-
VB.netでメソッドからコントロ...
-
servletからjspへオブジェクト...
-
javaで、、、
-
VB.NETでのnothing の意義について
-
Dispose()は、どんな時に使うの...
-
ピクチャーボックスに点を打つ...
-
VBスクリプトでテキストファイ...
-
String型からlong型への変換は...
-
JSPでのArrayListの表示につい...
-
C#で親にイベントを投げる方法
-
MessageBox.Show(Me,…の「Me」...
-
エクセルVBA/SpecialCellsで特...
-
Calendarクラスでエラーがでる
-
getParameter()について
おすすめ情報