подключение сокета php с использованием localhost через Telnet

Я пытался создать сокет и привязать его к локальному хосту 127.0.0.1 и пытаюсь подключиться к нему с помощью службы telnet от Microsoft, но когда я подключаюсь к указанному адресу и порту, я получаю следующую ошибку.

Предупреждение PHP: socket_write (): невозможно записать в сокет [0]: запрос на отправку
или получить данные было запрещено, потому что сокет не подключен и (когда
завершение на сокете дейтаграммы с использованием вызова sendto) адрес не был указан.

Подобная ошибка возвращается socket_read, я не понимаю, что telnet должен просто работать правильно, передавая запрос socket_connect локальному хосту.

Вот код:

set_time_limit(0);
$socket=null;
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(socket_bind($socket,"127.0.0.1",58)){
if(!socket_listen($socket,0)){
echo "Problem Listening to the socket";
}do{
$res=socket_accept($socket);
$write="\n Hello the connection has been established";
if(!socket_write($socket,$write,strlen($write))){
echo "Problem Reading the and writing to the socket";
}
do{
if(!$clientmsg=socket_read($socket,2048,PHP_NORMAL_READ)){
echo "Error reading Client Msg";
break;
}
$repsonse= "Thanks for you input";
socket_write($socket,$response,strlen($response));
if($nclientmsg=trim($clientmsg)){
continue;
}
if($clientmsg="close"){
socket_close($socket);
echo "The socket has been closed as promised Thanks";
break 3;
}
}while(true);
}while(true);
}else{
echo "Problem connecting to the socket.Unable to bind to the specified address";
}

Благодарю.

0

Решение

ваш код нигде не использует socket_connect .. вам нужно использовать socket_connect ДО того, как вы сможете socket_write (для tcp & telnet .. udp — это отдельная история) … в любом случае, вот пример кода для подключения к серверу telnet:

<?php
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if($socket===false){
throw new Exception("socket_create() failed: reason: " . socket_strerror(socket_last_error()));
}
assert(socket_set_block ( $socket)===true);
assert(socket_bind($socket,0,mt_rand(1024,5000))!==false);//TODO: don't use mt_rand... it has a (small) chance choosing a used address..
if(socket_connect($socket,
'131.252.208.48',7680
)!==true){
throw new Exception("socket_connect() failed: reason: " . socket_strerror(socket_last_error($socket)));
}
echo "connected!";
$buffer="";
do{
sleep(1);
socket_recv($socket,$buffer,100,0);
echo $buffer;
} while(strlen($buffer)>1);
socket_close($socket);

— я делаю что-то подобное в этом коде https://github.com/divinity76/outcastshit/blob/master/LoginWithPHP.php

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]