2003. 2. 12. 11:54

[PHP] Socket 예제

<?
header("Cache-Control:no-cache");
header("Expires:0" );
header("Pragma:no-cache");
?>
<!-- <META HTTP-EQUIV="REFRESH" CONTENT=1>  -->
<pre>
typedef struct _NETCROSS_PACKET{
  char type[8]; // SQL
  char BLSNAME[8]; //BLSWOMA
  char sessionid[15];
  char jobid[100]; //등록된 로직 ID  SelTest
  char userid[8];  // tae
  char userpw[8];  //1818
  char retsock[8];
  char bend[8];  //
  char size[8];
  char data[1024];
} FT_PACKET; 1195 Byte
CHR(1) 필드구별
CHR(2) 레코드 구별
</pre>
<hr>
<pre>
<?
        $szType = "SQL";
        $szBLSNAME = "BLSWOMA";
        $szJobId = "SelTest";
#        $szJobId = "UpTest";
        $szUserId = "tae";
        $szPassword = "1818";
        $szAddr = "211.35.135.66";
        $iPort = 30001;

        $szReturn = fncCommPRS($szAddr , $iPort , $szType , $szBLSNAME , $szJobId , $szUserId , $szPassword );

        for ( $i = 0 ; $i < count($szReturn) ; $i++)
        {
                        echo "PACKET $i | \\nSOURCE | ";
                        echo $szReturn[$i] . "\\n";
                        $iSize                = substr($szReturn[$i] , 163 , 8);
                        echo "SIZE | " . $iSize . "\\n";
                        echo "DATA | " . substr($szReturn[$i] , 171 , 171+ $iSize) . "\\n";
                        echo "<HR>\\n";
        }

/*
        $szSend = str_repeat(chr(0), 1195);
        $szSend = substr_replace($szSend , "SQL" , 0 , strlen("SQL"));
        $szSend = substr_replace($szSend , "BLSWOMA" , 8 , strlen("BLSWOMA"));
        $szSend = substr_replace($szSend , "SelTest" , 31 , strlen("SelTest"));
        $szSend = substr_replace($szSend , "tae" , 131 , strlen("tae"));
        $szSend = substr_replace($szSend , "1818" , 139 , strlen("1818"));
*/

        echo "END";

function fncCommPRS($szAddr , $iPort , $szType , $szBLSNAME , $szJobId , $szUserId , $szPassword )
{
        $szSend = str_repeat(chr(0), 1195);
        $szSend = substr_replace($szSend , $szType , 0 , strlen($szType));
        $szSend = substr_replace($szSend , $szBLSNAME , 8 , strlen($szBLSNAME));
        $szSend = substr_replace($szSend , $szJobId , 31 , strlen($szJobId));
        $szSend = substr_replace($szSend , $szUserId , 131 , strlen($szUserId));
        $szSend = substr_replace($szSend , $szPassword , 139 , strlen($szPassword));

        $oSocket = socket_create(AF_INET, SOCK_STREAM, 0) or die ("Socket Create Error");

        $szAddr = "211.35.135.66";
        $iPort = 30001;

        $oResult = @socket_connect($oSocket, $szAddr , $iPort) or die("Socket Connect Error");

        $iSend = @socket_write($oSocket, $szSend, strlen($szSend)) or die("Socket Write Error");

#        echo $iSend;

#  bend 에 1이 들어올때까지
        $iBend = 0;
        $iCount = 0;
        while ( !$iBend )
        {
                $szRecv = str_repeat(chr(0), 1195);
                $szRecv = socket_read ($oSocket, 1195, PHP_BINARY_READ)  or die("Socket Read Error");
                $iBend        = substr($szRecv,155,1);

#                $retData[SOURCE][$i]        = $szRecv;
#                $retData[SIZE][$i]                = $iSize;
                if ( $iBend == 1 ) break;   # 나중에 삭제
                $retData[$i++]                = $szRecv;
        }
        socket_close($oSocket);
        return $retData;
}
?>
</pre>