PHP とサーブレットは Socket_PHP を介して通信します チュートリアル

WBOY
リリース: 2016-07-13 17:47:40
オリジナル
874 人が閲覧しました

今回の実験では、PHPとサーブレット間の通信を実現するのに大変苦労しました。 。 。 。 。 。 。 。さらに、インターネット上の既製の情報は完全ではありません。この実験で発生したエラーと解決策を皆さんと共有できることを嬉しく思います。

PHPはクライアント側として機能し、サーブレットはサーバー側として機能します

サーバー側の一般的なアプローチは次のとおりです:

1. サーブレット クラスを作成し、サーバーの起動時にロードされるクラスとしてサーブレットを設定します。

<サーブレット>

<サーブレット名>ログイン

<サーブレットクラス>Servlet.LoginServlet

<起動時のロード>0

2.Serveltのinit()メソッドに別途サーバーサイドのコードを書いて監視する場合

while(true){

ソケット = サーバー.accept();

}

これにより、Tomcat の起動タイムアウトが発生します。

正しいアプローチは、個別の監視および処理スレッド クラス SocketServer を作成し、マルチスレッドを使用して init() でスレッドを開始することです。

public void init(ServletConfig config){

新しいスレッド(){

パブリック void run(){

試してみる{

ServerSocket サーバー = 新しい ServerSocket(4700);

ソケット ソケット = null;

while(true){

socket=server.accept();

SocketServer sServer=新しい SocketServer(ソケット);

sServer.start();

}

}catch(IOException e){

System.out.println(e.getMessage());}

}

}.start();

}

public class SocketServer extends Thread{

プライベートソケットソケット

public SocketServer(ソケットソケット){

This.socket = ソケット

}

public void run(){

文字列出力 = "";

{

を試してください

BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

PrintWriter os=new PrintWriter(socket.getOutputStream());

文字列行 = null;

行 = is.readLine();

System.out.println(行);

出力 = "サーバー送信";

os.println(出力);

os.flush();

は.close();

os.close();

ソケット.クローズ();

} catch (IOException e) {

// TODO 自動生成された catch ブロック

e.printStackTrace();

}

}

}

クライアント側で、サーバー側から送信されたデータを受信できませんでした。コードを注意深く確認したところ、 os.flush(); がないことがわかりました。

init() メソッドで新しいスレッドを開始し、この新しいスレッドを通じてリクエストごとに新しいスレッドを開始して、クライアントからのソケットリクエストに応答します

クライアント側では、PHP で書かれています

クライアントはまずサーバーにデータを送信し、次にサーバーから返されたデータを受信して​​表示します

$userName = 'veverrr' ;

$パスワード = 'SWJTU';

$write_str = '';

if ($userName == null || $password == null){

// ログイン システムに戻ります

}

$socket_host ='ローカルホスト';

$ソケットポート = 4700;

$ソケット = ソケット作成(AF_INET、SOCK_STREAM、SOL_TCP);

$connection = ソケット接続($socket, $socket_host,$socket_port);

$write_str .= $userName.$password.chr(13)

;

if (!socket_write($socket, $write_str,strlen($write_str))){

エコー「書き込み接続」

}

$return_str = ソケット読み取り($socket, 1024);

エコー $return_str;

ソケットクローズ($ソケット);

is.readline() を使用するとサーバーが停止しました。その後、海外の Web サイトでメソッドを見つけ、テストに合格しました。

主な目的は、クライアントから送信されたデータの後に chr(13).chr(10) (キャリッジリターンとラインフィードを意味します) を追加し、Java が認識できる形式に変換することです。

PHPとサーブレット間の通信の全体の流れと注意点は以上です。

veverrrさんのコラムより抜粋

http://www.bkjia.com/PHPjc/478482.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478482.html技術記事今回の実験では、PHPとサーブレット間の通信を実現するのに大変苦労しました。 。 。 。 。 。 。 。さらに、インターネット上で入手可能な情報は完全ではありません。この実験で発生したエラーを報告できることを嬉しく思います...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート