ホームページ バックエンド開発 PHPチュートリアル PHP でのフォークとソケットの使用に関する Sample_PHP チュートリアル

PHP でのフォークとソケットの使用に関する Sample_PHP チュートリアル

Jul 13, 2016 pm 05:36 PM
fork php socket 優れた 使用 存在する 会う

最近剛好遇到一個頭大的問題寫了這個code讓大家參考一下吧
家裏的無線AP功能不太好,他只提供把外部真實IP map 到 Nat裡面的某個IP
不能指定某個port map到某個內部IP的Port
可是我已經把外部的IP Map到內部的Linux);" href="javascript:;" target=_self>Linux Server上,
但是我又想從外部使用VNC連到內部的一台Windows電腦。
所以就寫了這個程式
原理是這樣

這個程式會在Linux Server上開一個Port作Listen的動作
當外部連到這個Port時,程式會再開啟另一個連線連到內部Windows的VNC上
把外部的封包原封不動的丟到VNC的連線上,然後把VNC連線傳回的資料原封不動的再丟回外部的Port

程式碼:
<br><font face="NSimsun">#!/usr/bin/php -q<br></font><font color="#000000"><font face="NSimsun"><font color="#0000bb">&lt;?php<BR> $IP</FONT><FONT color=#007700>=</FONT><FONT color=#dd0000>192.168.1.1</FONT><FONT color=#007700>;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>//Windows電腦的IP<BR> </FONT><FONT color=#0000bb>$Port</FONT><FONT color=#007700>=</FONT><FONT color=#dd0000>5900</FONT><FONT color=#007700>;        </FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>//VNC使用的Port<BR> </FONT><FONT color=#0000bb>$ServerPort</FONT><FONT color=#007700>=</FONT><FONT color=#dd0000>9999</FONT><FONT color=#007700>;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>//Linux Server對外使用的Port<BR> </FONT><FONT color=#0000bb>$RemoteSocket</FONT><FONT color=#007700>=</FONT><FONT color=#0000bb>false</FONT><FONT color=#007700>;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>//連線到VNC的Socket<BR> </FONT><FONT color=#007700>function</FONT><FONT color=#0000bb>SignalFunction</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#40;$Signal&amp;#41;<BR> </FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#123;<BR>   //這是主Process的訊息處理函數<BR>  </FONT><FONT color=#007700>global</FONT><FONT color=#0000bb>$PID</FONT><FONT color=#007700>;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>//Child Process的PID<BR>  </FONT><FONT color=#007700>switch &amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#40;$Signal&amp;#41;<BR>  </FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#123;<BR>   </FONT><FONT color=#007700>case</FONT><FONT color=#0000bb>SIGTRAP</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#58;<BR>   </FONT><FONT color=#007700>case</FONT><FONT color=#0000bb>SIGTERM</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#58;<BR>    //收到結束程式的Signal<BR>    </FONT><FONT color=#007700>if&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#40;$PID&amp;#41;<BR>    </FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#123;<BR>     //送一個SIGTERM的訊號給Child告訴他趕快結束掉嘍<BR>     </FONT><FONT color=#0000bb>posix_kill</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#40;$PID,SIGTERM&amp;#41;;<BR>     //等待Child Process結束,避免zombie<BR>     </FONT><FONT color=#0000bb>pcntl_wait</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#40;$Status&amp;#41;;<BR>    </FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#125;<BR>    //關閉主Process開啟的Socket<BR>    </FONT><FONT color=#0000bb>DestroySocket</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#40;&amp;#41;;<BR>    </FONT><FONT color=#007700>exit&amp;</FONT></FONT><FONT face=NSimsun color=#ff8000>#40;0&amp;#41;; //結束主Process<BR>    </FONT><FONT face=NSimsun><FONT color=#007700>break;<BR>   case</FONT><FONT color=#0000bb>SIGCHLD</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#58;<BR>    /*<BR>當Child Process結束掉時,Child會送一個SIGCHLD訊號給Parrent<BR>當Parrent收到SIGCHLD,就知道Child Process已經結束嘍 ,該做一些<BR>結束的動作*/<BR>    </FONT><FONT color=#007700>unset&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#40;$PID&amp;#41;; //將$PID清空,表示Child Process已經結束<BR>    </FONT><FONT color=#0000bb>pcntl_wait</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun color=#ff8000>#40;$Status&amp;#41;; //避免Zombie<BR>    </FONT><FONT face=NSimsun color=#007700>break;<BR>   default&amp;</FONT><FONT face=NSimsun><FONT color=#ff8000>#58;<BR>  </FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#125;<BR> </FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#125;<BR> </FONT><FONT color=#007700>function</FONT><FONT color=#0000bb>ChildSignalFunction</FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#40;$Signal&amp;#41;<BR> </FONT><FONT color=#007700>&amp;</FONT></FONT><FONT face=NSimsun><FONT color=#ff8000>#123;<BR>//これは子プロセスのメッセージ処理関数です <BR> </FONT><FONT color=#007700>switch &</FONT></FONT><FONT face=NSimsun>#40;$Signal&#41;<FONT color=#ff8000> <BR></FONT>&<FONT color=#007700></FONT></FONT><FONT face=NSimsun>#123;<FONT color=#ff8000> <BR></FONT>case<FONT color=#007700></FONT>SIGTRAP<FONT color=#0000bb> </FONT>&<FONT color=#007700> </FONT> </FONT><FONT face=NSimsun> <FONT color=#ff8000><BR>#40;&#41; //ソケットを閉じる</FONT> ; <FONT color=#007700>#125;</FONT><FONT color=#0000bb></FONT>&<FONT color=#007700></FONT></FONT><FONT face=NSimsun>#125;<FONT color=#ff8000> <BR><BR>function</FONT><FONT color=#0000bb>ProcessSocket</FONT><FONT color=#007700>&</FONT> </FONT><FONT face=NSimsun><FONT color=#ff8000>#40 ;$ConnectedServerSocket&#41;<BR> </FONT><FONT color=#007700>&</FONT></FONT><FONT face=NSimsun> <FONT color=#ff8000>#123;<BR> //子プロセスソケット処理関数 </FONT> //$ConnectedServerSocket -&gt; 外部接続ソケット<font color="#007700"></font>グローバル</font><font face="NSimsun">$ServerSocket <font color="#ff8000"><br>、</font><font color="#007700">$ RemoteSocket</font></font>,<font face="NSimsun"><font color="#ff8000">$IP<br></font>,<font color="#007700"></font>$ Port</font><font face="NSimsun"><font color="#ff8000"><br>;</font> <font color="#007700"></font> $ServerSocket<font color="#0000bb"></font>=<font color="#007700"></font>$ConnectedServerSocket</font><font face="NSimsun"><font color="#ff8000">;<br> 宣言</font>
<font color="#007700"></font></font>http://www.bkjia.com/PHPjc/508267.html<font face="NSimsun"><font color="#ff8000">www.bkjia.com<br><br>tru​​e<br></font>http://www.bkjia.com/PHPjc/508267.html<font color="#007700"></font>技術記事<font color="#0000bb"></font>最近大きな問題が発生したので、参考までにこのコードを書きました。自宅のワイヤレス AP 機能は、外部の実際の IP を Nat の特定の IP にマッピングする機能しか提供していません。 .<font color="#007700"></font><font color="#0000bb"></font>
<font color="#007700"></font></font></font></font>
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles