Flex3。 ソケット接続パート2

継続的なソケット接続パート1


注: XMLSocketオブジェクトを使用するようにサーバーを構成するのは、大変な作業です。 したがって、アプリケーションがリアルタイムの対話を必要としない場合は、XMLSocketクラスの代わりにURLLoaderクラスを使用してください。

XMLSocketクラスのXMLSocket.connect()およびXMLSocket.send()メソッドを使用して、ソケット接続を介してXMLデータをサーバーに転送できます。 XMLSocket.connect()メソッドは、Webサーバーポートへの接続を確立します。 XMLSocket.send()メソッドは、確立されたソケット接続を使用してXMLオブジェクトをサーバーに送信します。

XMLSocket.connect()メソッドが呼び出されると、Flash PlayerはサーバーへのTCP / IP接続を開き、次のいずれかのイベントが発生するまで開いたままにします。

Java XML Socketサーバーを作成して接続する


次のコードは、着信接続を受け入れ、受信したメッセージをコマンドウィンドウに表示する単純なJava XMLソケットサーバーを示しています。 デフォルトでは、コンピューターのポート8080に新しいサーバーが作成されますが、コマンドラインからサーバーを起動するときに別のポート番号を指定できます。

新しいテキストドキュメントを作成し、次のコードを追加します。

 import java.io.*; import java.net.*; class SimpleServer{ private static SimpleServer server; ServerSocket socket; Socket incoming; BufferedReader readerIn; PrintStream printOut; public static void main(String[] args){ int port = 8080; try{ port = Integer.parseInt(args[0]); } catch (ArrayIndexOutOfBoundsException e) { // Catch exception and keep going. } server = new SimpleServer(port); } private SimpleServer(int port) { System.out.println(">> Starting SimpleServer"); try{ socket = new ServerSocket(port); incoming = socket.accept(); readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream())); printOut = new PrintStream(incoming.getOutputStream()); printOut.println("Enter EXIT to exit.\r"); out("Enter EXIT to exit.\r"); boolean done = false; while (!done){ String str = readerIn.readLine(); if (str == null){ done = true; }else{ out("Echo: " + str + "\r"); if(str.trim().equals("EXIT")){ done = true; } } incoming.close(); } } catch (Exception e){ System.out.println(e); } } private void out(String str){ printOut.println(str); System.out.println(str); } } 
import java.io.*; import java.net.*; class SimpleServer{ private static SimpleServer server; ServerSocket socket; Socket incoming; BufferedReader readerIn; PrintStream printOut; public static void main(String[] args){ int port = 8080; try{ port = Integer.parseInt(args[0]); } catch (ArrayIndexOutOfBoundsException e) { // Catch exception and keep going. } server = new SimpleServer(port); } private SimpleServer(int port) { System.out.println(">> Starting SimpleServer"); try{ socket = new ServerSocket(port); incoming = socket.accept(); readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream())); printOut = new PrintStream(incoming.getOutputStream()); printOut.println("Enter EXIT to exit.\r"); out("Enter EXIT to exit.\r"); boolean done = false; while (!done){ String str = readerIn.readLine(); if (str == null){ done = true; }else{ out("Echo: " + str + "\r"); if(str.trim().equals("EXIT")){ done = true; } } incoming.close(); } } catch (Exception e){ System.out.println(e); } } private void out(String str){ printOut.println(str); System.out.println(str); } }

ドキュメントをSimpleServer.javaとしてディスクに保存し、SimpleServer.classというJavaファイルを作成するJavaコンパイラを使用してコンパイルしますコマンドプロンプトを開き、 java SimpleServerと入力して、XMLソケットサーバーを起動できます。 SimpleServer.classファイルは、コンピューターまたはネットワーク上のどこにでも配置できます。 Webサーバーのルートディレクトリに配置する必要はありません。

Javaクラスへのパスが見つからなかったためにサーバーを起動できない場合は、次のようにjava -classpathを試してください。 SimpleServer (私のJavaの知識はそれほど深くないため、この段落の翻訳を誤って作成した場合は、修正してください)

ActionScriptアプリケーションからXMLSocket接続を作成するには、XMLSocketクラスの新しいインスタンスを作成し、ホスト名とポート番号を指定するXMLSocket.connect()メソッドを呼び出す必要があります。

var xmlsock:XMLSocket = new XMLSocket();
xmlsock.connect("127.0.0.1", 8080);


securityErrorイベント(flash.events.SecurityErrorEvent)は、XMLSocket.connect()が呼び出され、セキュリティサンドボックスの外部にあるサーバーに接続しようとした場合、または指定されたポート番号が1024未満の場合に発生する可能性があります。

サーバーからデータを受信するたびに、DATAイベント(flash.events.DataEvent.DATA)がトリガーされます。

 xmlsock.addEventListener(DataEvent.DATA, onData); private function onData(event:DataEvent):void{ trace("[" + event.type + "] " + event.data); } 


XMLSocket.send()メソッドを使用してXMLSocketデータをサーバーに送信し、パラメーターとしてXMLオブジェクトまたは文字列を渡すことができます。 Flash Playerは、指定されたパラメーターをString型のオブジェクトに変換し、コンテンツであるXMLSocketをサーバーに転送し、末尾にゼロ(0)バイトを追加します。

xmlsock.send(xmlFormattedData);

XMLSocket.send()メソッドは、データが正常に転送されたことを確認する値を返しません。 転送中にエラーが発生した場合、タイプIOErrorの例外がスローされます。

ソケットサーバーによって送信される各XMLメッセージは、改行文字(\ n)で終わる必要があります

建設的なコメントを事前に感謝し、この翻訳が誰かに役立ち、タスクの解決に役立つことを心から願っています。

Source: https://habr.com/ru/post/J52928/


All Articles