Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
19th
Сен
Наброски онлайн чата на php
Posted by Chas under Топик-обзор
Собственно 6 файлов
style.css – стили
page_top/page_bottom.php – шапка и дно “сайта”
server.php – сам сервер
config.php – настройки
chat.php – “клиент”, то есть пользователи открывают ее.
фух вроде все закомментировал… остальные файлы не требуют комментариев.
приведу код сервера:
include_once(‘config.php’);
$conn = mysql_connect($mysql_addr, $mysql_user, $mysql_pass);
mysql_select_db($mysql_name);
header(‘Expires: Mon, 26 Jul 1997 05:00:00 GMT’);
header(‘Cache-Control: no-store, no-cache, must-revalidate’);
header(‘Cache-Control: post-check=0, pre-check=0′, FALSE);
header(‘Pragma: no-cache’);
// все выше понятно
// error_reporting(E_ALL ^ E_WARNING);
set_time_limit(0);
ob_implicit_flush();
ignore_user_abort();
// игн
орируем закрытие
echo ‘<style> body,html {font-family: Tahoma; font-size:11px;} </style>
<b>CHAT SERVER</b>’;
// заголовок
g_info(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))<0,‘Socket create’);
// создаем сокет (g_info описана в config.php)
g_info(socket_bind($sock, $adress, $port)<0,‘Socket bind to ‘.$adress);
// связываем
g_info(socket_listen($sock, 5
// слушаем
//$sock = socket_create_listen($port);
// или так
socket_set_nonblock($sock);
// неблокирующий
$current_conn = 0;
$connections =
function server_shutdown(){
global $sock;
socket_close($sock);
die(‘<br><b>SERVER CLOSED!</b>’);
}
// это закрывать
$listen = true;
echo ‘<br>You may close this page or admin it by special soft.’;
function get_u($uid, &$r){
$result = mysql_query(‘SELECT * FROM `sm_users` WHERE `user_uniq`=’.$uid);
if ($result and mysql_num_rows($result)){
$r = mysql_fetch_array($result);
return true;
}
return false;
}
// приплел даже mysql, выбирает пользователя (его запись) через уникальный id function send_head($sock,$send_styles=false){
send_text($sock,
"HTTP/1.1 200 OK\n".
"Expires: Mon, 26 Jul 1997 05:00:00 GMT\n".
"Content-Type: text/
html; charset=UTF-8\n".
"Cache-Control: no-store, no-cache, must-revalidate\n".
"Cache-Control: post-check=0, pre-check=0\n".
"Connection: Keep-Alive\n".
"Pragma: no-cache\n\n".($send_styles?‘<style> body,html {font-family: Tahoma; font-size:11px;} </style>’:”));
}
// очевидно
function trunc($what, &$w1, &$w2){
if ($ps = strpos($what,‘-’)){
$w1 = substr($what, 0, $ps);
$w2 = substr($what, $ps+1
, strlen($what));
} else {
$w1 = $what;
$w2 = ”;
}
}
// если есть "-" то в первое записать то что слева а во второе то что справа, иначе все записать в первое
span>
function send_clientlist(){
$ucl = ”;
foreach($connections as $id => $conn){
$ucl .= $conn[user][user_name].‘<br>’;
}
foreach($connections as $id => $conn){
send_text($connections[$id][’socket’], ‘<script>ucl("’.$ucl.
}
}
// разослать список пользователей
// ДАЛЕЕ ГЛАВНЫЙ ЦИКЛ
while ($listen) {
if (($new_connection = @socket_accept($sock)) !== false){
// если ктото появился
usleep(500000);
// полсекунды ждем
@socket_recv($new_connection,$recvdat, 2048,0);
// читаем то что прислал и если это гет-запрос то
if (preg_match("/GET \/(.*?) HTTP/", $recvdat, $res)){
trunc($res[1],$page,$info);
// смотрим что спрашивали. если спросили client-111 то
// в page запишет client, в info – 111
if ($page==‘client’){
// если это слушатель
&n
bsp; $uid = (int)$info;
if (get_u($uid, $r)){
// получили пользователя
socket_getpeername($new_connection,$peer);
// взяли ip
$connections[] = array(’socket’=>$new_connection,‘peer’=>$peer,‘user’=>$r);
send_head($new_connection,true);
send_clientlist();
// отправили ему недоделанную голову + клиенты
} else {
// иначе сообщили что польз. с таким уник. ид нету
send_head($new_connection
send_text($new_connection,‘ERR-’.$uid);
socket_close($new_connection);
}
} elseif ($page==‘add’
1;{
// если это запрос типа "добавькасообщение"
trunc($info, $u_t, $message);
// выдираем
$uid = (int)$u_t;
send_head($new_connection);
if (get_u($uid, $r)){
// если автор достоверный то рассылаем
foreach($connections as
$id => $conn){
send_text($connections[$id][’socket’], $r[‘user_name’].‘ > ‘.$message.‘<br>’);
}
send_text($new_connection,‘OK’);
} else {
send_text($new_connection,‘ERR’);
}
socket_close($new_connection);
} elseif ($page==‘closeserver’){
// если запрос типа ануказавалитесервер
if ($info==SECRET_WORD){
server_shutdown();
send_head($new_connection,true);
send_text($new_connection, ‘SERVER CLOSED’);
}
socket_close($new_connection);
} elseif ($page==’serverinfo’){
// если возжелили информации
if ($info==SECRET_WORD){
send_head($new_connection,true);
&nbs
p; $serverinfo = "SERVER INFORMATION:<br><br>".
"Commands:<br>".
" 1. <a href=’closeserver-".SECRET_WORD."’ target=’_blank’>Close server</a><br>".
"Information:<br>".
" 1. ClientsList:<br>";
foreach ($co
nnections as $conn){
$serverinfo.=" IP:".$conn[‘peer’]." USER-NAME:".$conn[‘user’][‘user_name’]."<br>";
 
; }
send_text($new_connection, $serverinfo);
}
socket_close($new_connection);
}
} else {
socket_close($new_connection);
die(‘ERROR’);
}
}
usleep(1);
}
?>
дамп базы данных
`id` INT(5) NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(64) NOT NULL,
`user_pass` VARCHAR
0;64) NOT NULL,
`user_uniq` INT(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)