Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use PHP socket to send and receive data

Tags:

php

sockets

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.

like image 591
ucha Avatar asked Jan 23 '12 06:01

ucha


People also ask

Can I use sockets in PHP?

Socket programming can be defined as the programming approach that has the server and the client as the application where a connection has to be established between both of them to facilitate the communication between them. In terms of PHP, it also lets us implement the concept of socket programming.

What is Fsockopen PHP?

The fsockopen() function opens an Internet or Unix domain socket connection.

What is TCP in PHP?

TCP/IP is the short for Transmission Control Protocol/Internet Protocol. TCP/IP is the suite of communications protocols used to connect hosts on the Internet.


2 Answers

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);
?>
like image 177
sanmai Avatar answered Oct 17 '22 05:10

sanmai


You are not using the gethostbyname function, so it tries to connect to a nonexistent ip address

<?php
$address= gethostbyname('yourdata.com');
like image 27
user3245415 Avatar answered Oct 17 '22 05:10

user3245415