2012-01-23 33 views
6

PHPソケットでデータを送受信しようとしています。PHPソケットを使用してデータを送受信します

EvrythingはOKですが、データを送信しようとしているときにPHPは何も送信しません(Wiresharkは送信データの長さが0であると私に話しました)。

私はこのコードを使用しています:

<?php 
$address = 'example.com'; 
$port = 1234; 

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
$sockconnect = socket_connect($sock, $address, $port); 

$c = 0; 
do { 
    $c++; 
    $msg = '<test>Xml data</test>'; 

    socket_write($sock, $msg, strlen($msg)); 

    echo socket_read($sock, 1024 * 100, PHP_NORMAL_READ); 

} while ($c < 3); 

socket_close($sock); 

誰も私を助けることができますか? 私の質問を読んでくれてありがとう。

答えて

7

一度エラーをチェックしないと、すべてが正常であることをどのように知ることができますか?

には、以下のexample from the manualを考えてみましょう:

<?php 
error_reporting(E_ALL); 

/* Get the port for the WWW service. */ 
$service_port = getservbyname('www', 'tcp'); 

/* Get the IP address for the target host. */ 
$address = gethostbyname('www.example.com'); 

/* Create a TCP/IP socket. */ 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
if ($socket === false) { 
    echo "socket_create() failed: reason: " . 
     socket_strerror(socket_last_error()) . "\n"; 
} 

echo "Attempting to connect to '$address' on port '$service_port'..."; 
$result = socket_connect($socket, $address, $service_port); 
if ($result === false) { 
    echo "socket_connect() failed.\nReason: ($result) " . 
      socket_strerror(socket_last_error($socket)) . "\n"; 
} 

$in = "HEAD/HTTP/1.1\r\n"; 
$in .= "Host: www.example.com\r\n"; 
$in .= "Connection: Close\r\n\r\n"; 
$out = ''; 

echo "Sending HTTP HEAD request..."; 
socket_write($socket, $in, strlen($in)); 
echo "OK.\n"; 

echo "Reading response:\n\n"; 
while ($out = socket_read($socket, 2048)) { 
    echo $out; 
} 

socket_close($socket); 
?> 
+0

に接続しようとしますもう一度私に答えないでください。 しかし、私はSocketTest v3.0経由でデータを送信しているときに正しく動作します – ucha

+0

'HEAD'リクエストの私の例はあなたのシステムで動作しますか? – sanmai

+0

はい、それは他のホスト上で動作しますが、私のホストは1980年以外のポートからのHTTPヘッダー要求に応答しないので、xmlデータのみを送信する必要があります。XMLを送信しているときデータ。 – ucha

1

あなたはgethostbyname関数を使用していないので、それはそこにエラー決してありませんが、リモートホストがない、存在しないIPアドレス

<?php 
$address= gethostbyname('yourdata.com'); 
関連する問題