Reputation: 373
I'm trying to send and receive data by PHP socket.
Evrything is OK but when I'm trying to send data PHP does not send anything (Wireshark told me that sent data length was 0).
I'm using this code:
<?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);
Can anyone help me? Thanks for reading my question.
Upvotes: 9
Views: 62982
Reputation: 65
You are not using the gethostbyname function, so it tries to connect to a nonexistent ip address
<?php
$address= gethostbyname('yourdata.com');
Upvotes: 3
Reputation: 30931
How can you know that everything is okay if you don't check for errors even once?
Consider the following 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);
?>
Upvotes: 9