2017-11-27 2 views
0

XML을 TCP \ IP (소켓) 연결의 서버로 보내려고합니다.소켓에 XML 요청 보내기

내 연결은 정상입니다. 보내는 부분이 문제입니다.

아래 참조.

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$host = "xx.xxx.xx.xxx"; 
$port = xxxx; 

// create socket 
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 

// connect to server 
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n"); 
if($result === true){ 
    echo 'connected'; 
} 

$sendVendRequest=' 
<ipayMsg client="SAFEPAY" term="00001" seqNum="0" time=" '.date('Y-m-d H: i: s').' +0200"> 
    <elecMsg ver="2.44"> 
     <vendReq> 
      <ref>319155500001</ref> 
      <amt cur="KSh">1000</amt> 
      <numTokens>1</numTokens> 
      <meter>A12C3456789</meter> 
      <payType>cash</payType> 
     </vendReq > 
    </elecMsg> 
</ipayMsg>'; 


$vendRequestXml=simplexml_load_string($sendVendRequest) or die("Error: could not create an object"); 
// print_r($vendRequestXml); 
socket_write($socket, $sendVendRequest, strlen($sendVendRequest)) or die("Could not send data to server\n"); 

송신 파트가 실패합니다. 타임 아웃 될 때까지로드됩니다. 나는 내가 요청을 잘못 보내고 있다고 생각합니다. 누군가 이것을 어떻게 달성 할 지 지시 해주십시오.

+0

당신은 tcp 소켓 연결을 만들었습니까? – Deep

+0

@DeepKakkar socket_create는 괜찮습니다 ... 아주 잘 연결되어 있습니다. 글쎄, 내가 질문을 이해하지 못한다면 – user6721269

+0

https://stackoverflow.com/questions/11773769/creating-a-tcp-socket-connection-and-sending-through-a-xml-request-in-order-to -g – Deep

답변

0

이 코드는 나를 위해 작동 :

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$host = "example.com"; 
$port = 80; 

// create socket 
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 

// connect to server 
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n"); 
if($result === true){ 
    echo 'connected'; 
}· 

$st=' 
<ipayMsg client="SAFEPAY" term="00001" seqNum="0" time=" '.date('Y-m-d H: i: s').' +0200"> 
    <elecMsg ver="2.44"> 
     <vendReq> 
      <ref>319155500001</ref> 
      <amt cur="KSh">1000</amt> 
      <numTokens>1</numTokens> 
      <meter>A12C3456789</meter> 
      <payType>cash</payType> 
     </vendReq > 
    </elecMsg> 
</ipayMsg>'; 


$length = strlen($st); 

while(true) { 
    $sent = socket_write($socket, $st, $length); 

    if($sent === false) { 
    break; 
    } 

    // Was the entire msg sent? 
    if($sent < $length) { 
    // If not, handle the leftover data. 
    $st = substr($st, $sent); 
    $length -= $sent; 
    } else { 
    break; 
    } 
} 

echo socket_read($socket, 8192); 

는 해당 포트에 TELENET 수 있습니까?