2012-01-23 23 views
6

Tôi đang cố gửi và nhận dữ liệu bằng ổ cắm PHP.Sử dụng ổ cắm PHP để gửi và nhận dữ liệu

Evrything là OK nhưng khi tôi đang cố gắng gửi dữ liệu PHP không gửi bất cứ điều gì (Wireshark nói với tôi rằng chiều dài dữ liệu được gửi là 0).

Tôi đang sử dụng mã này:

<?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); 

bất cứ ai có thể giúp tôi? Cảm ơn bạn đã đọc câu hỏi của tôi.

Trả lời

7

Làm cách nào để bạn biết rằng mọi thứ đều ổn nếu bạn không kiểm tra lỗi ngay cả một lần?

Hãy xem xét những điều sau 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

Không có bất kỳ lỗi nào, nhưng máy chủ từ xa không không trả lời tôi nữa. Nhưng nó hoạt động chính xác khi tôi gửi dữ liệu qua SocketTest v3.0 – ucha

+0

Ví dụ của tôi cho yêu cầu 'HEAD' có hoạt động trên hệ thống của bạn không? – sanmai

+0

Có nó hoạt động trên các máy chủ khác, nhưng tôi chỉ cần gửi dữ liệu xml, vì máy chủ của tôi không phản hồi yêu cầu đầu http từ bất kỳ cổng nào ngoại trừ 1980. Nó không trả lời tôi (thậm chí sử dụng ví dụ của bạn) khi tôi gửi XML dữ liệu. – ucha

1

Bạn đang không sử dụng chức năng GetHostByName, vì vậy nó sẽ cố gắng để kết nối với một địa chỉ IP không tồn tại

<?php 
$address= gethostbyname('yourdata.com'); 
Các vấn đề liên quan