Здравствуйте. Я решил сделать небольшой чат Клиент-Сервер.
Я нашёл код в интернете, но не понимаю как его преобразовать так, чтобы он мог отправлять сообщения, напечатанные вручную и принимал их и записывал в textfield в форму.
Можете ли подсказать или дать пример?
Сервер:
Код:
<?php
header('Content-Type: text/plain;');
error_reporting(E_ALL ^ E_WARNING);
set_time_limit(0);
ob_implicit_flush();
echo "-= Server =-\n\n";
$address = 'localhost';
$port = 10001;
try {
echo 'Create socket ... ';
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo "OK\n";
}
echo 'Bind socket ... ';
if (($ret = socket_bind($sock, $address, $port)) < 0) {
throw new Exception('socket_bind() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo "OK\n";
}
echo 'Listen socket ... ';
if (($ret = socket_listen($sock, 5)) < 0) {
throw new Exception('socket_listen() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo "OK\n";
}
do {
echo 'Accept socket ... ';
if (($msgsock = socket_accept($sock)) < 0) {
throw new Exception('socket_accept() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo "OK\n";
}
$msg = "Hello, Client!";
echo "Say to client ($msg) ... ";
socket_write($msgsock, $msg, strlen($msg));
echo "OK\n";
do {
echo 'Client said: ';
if (false === ($buf = socket_read($msgsock, 1024))) {
throw new Exception('socket_read() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo $buf."\n";
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
echo "Say to client ($buf) ... ";
socket_write($msgsock, $buf, strlen($buf));
echo "OK\n";
} while (true);
} while (true);
} catch (Exception $e) {
echo "\nError: ".$e->getMessage();
}
if (isset($sock)) {
echo 'Close socket ... ';
socket_close($sock);
echo "OK\n";
}
?>
Клиент:
Код:
<?php
header('Content-Type: text/plain;');
error_reporting(E_ALL ^ E_WARNING);
set_time_limit(0);
ob_implicit_flush();
echo "-= Client =-\n\n";
$address = 'localhost';
$port = 10001;
try {
echo 'Create socket ... ';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo "OK\n";
}
echo 'Connect socket ... ';
$result = socket_connect($socket, $address, $port);
if ($result === false) {
throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n");
} else {
echo "OK\n";
}
echo 'Server said: ';
$out = socket_read($socket, 1024);
echo $out."\n";
$msg = "Hello, Server!";
echo "Say to server ($msg) ...";
socket_write($socket, $msg, strlen($msg));
echo "OK\n";
echo 'Server said: ';
$out = socket_read($socket, 1024);
echo $out."\n";
$msg = 'shutdown';
echo "Say to server ($msg) ... ";
socket_write($socket, $msg, strlen($msg));
echo "OK\n";
} catch (Exception $e) {
echo "\nError: ".$e->getMessage();
}
if (isset($socket)) {
echo 'Close socket ... ';
socket_close($socket);
echo "OK\n";
}
?>