2015-02-09 7 views
0

Этот PHP фрагмент находится на стороне сервера:Сокеты: Почему мое сообщение с сервера всегда делится на одни и те же 2 сообщения?

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) 
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; 


//bind the socket to the ip address and port 
if (socket_bind($sock, $address, $port) === false) 
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 

//make the socket listen for connections, SOMAXCONN is the max limit of queued sockets waiting to 
//connect 
if (socket_listen($sock, SOMAXCONN) === false) 
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 

if (($client= socket_accept($sock)) === false) 
    echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; 

if (false === ($id = socket_read($client, 10, PHP_NORMAL_READ))) 
    socket_close($client); //close the socket connection 

$talkback = "PHP: Your id is '$id'.\n"; 
socket_write($client, $talkback, strlen($talkback)); 

Это ява фрагмент кода на стороне клиента:

while ((inputLine = in.readLine()) != null) 
    Log.i("MY_TAG", "Message received: " + inputLine); 

Где inputLine является строкой, и in является входной поток моего клиентского сокета.

Выход ВСЕГДА:

Message received: Your id is '1

Message received: '.

+0

показать, как вы открыли розетку? –

+1

'$ id =" 1 \ n "' возможно? – AbraCadaver

+0

@MarcB Я добавил. Я включил только необходимый код, который, я думаю, вам нужно увидеть, но дайте мне знать, если вам нужно увидеть больше. – Kacy

ответ

1

Вы чтении $id из розетки и в PHP_NORMAL_READ чтения завершается символом новой строки, поэтому $id == "1\n". Только trim() it:

$id = trim($id); 
//or 
$talkback = "PHP: Your id is '" . trim($id) . "'.\n"; 
+0

Я понял это, как только я сделал var_dump, как вы предлагали. Спасибо. – Kacy