Возможно вы искали: 'Skat 2095'

May 15 2025 18:45:15
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Использование сокетов в PHP (php socket nntp news)

Использование сокетов в PHP (php socket nntp news)

Ключевые слова: php, socket, nntp, news, (найти похожие документы)

From: Denis Roshchin <denis@komkon.org.>
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Использование сокетов в PHP

Оригинал: http://www.komkon.org:8008/~denis/mydoc/Using%20sockets%20in%20PHP.htm

Использование сокетов в PHP
(работа с Usenet-новостными серверами)


Denis Roshchin, Armel Fauveau.

PHP может открывать соккеты на локальной или удаленной машине. В
данной статье будет рассмотрен пример использования соккетов для:
соединения с Usenet-новостным сервером, ведения диалога с ним и
скачивания некоторых статей.

Открываем сокет.

Для открываения соккета используется функция fsockopen(). Эта функция
доступна, как в PHP3, так и PHP4. Вызов функции имеет следующий вид:

int fsockopen (string hostname, int port [, int errno [, string errstr [, double timeout]]])


Для UDP соединения, надо определить протокол: udp://hostname.

Больше информации о функции fsockopen() можно узнав здесь:
http://www.php.net/manual/function.fsockopen.php


NNTP-протокол (Network News Transfer Protocol)

Для доступа к новостному usenet-серверу мы будем использовать
NNTP-протокол.

Этот протокол детально описан в RFC977 (Request For Comment number 977).
Полное описание присутствует в интернете:
http://www.w3.org/Protocols/rfc977/rfc977.html

Этот документ детально описывает процедуру соединения и диалога с
сервером.


Соединение (Connecting)

Для соединения с NNTP-сервером нам необходимо знать его имя (или
IP-адрес) и порт. Так же необходимо указывать таймер, чтобы в случае
невозможности подсоединения к серверу не "заморозили" application.

<?php
$cfgServer = "your.news.host";
$cfgPort = 119;
$cfgTimeOut = 10;
// open a socket
if(!$cfgTimeOut)
// without timeout
$usenet_handle = fsockopen($cfgServer, $cfgPort);
else
// with timeout
$usenet_handle = fsockopen($cfgServer, $cfgPort, &$errno, &$errstr, $cfgTimeOut);
if(!$usenet_handle) {
echo "Connexion failedn";
exit();
}
else {
echo "Connectedn";
$tmp = fgets($usenet_handle, 1024);
}
?>


Ведение диалога с сервером.

Итак, теперь мы присоединились к серверу и можем вести диалог с ним,
используя ранее открытый соккет. Для примера, попробуем достать десять
последних сообщений с какой-либо группы. В RFC977 описано, что первый
шаг - выбрать группу с помощью GROUP комманды:

GROUP ggg


Обязательный парамтор - ggg - имя группы, которую мы хотим выбрать
(например, "net.news"). Список существующих групп может быть получен с
помощью комманды LIST. Удачный выбор группы будет подтвержден ответом
сервера, где будет сообщаться колличество новых, старых статей и общее
колличество.

chrome:~$ telnet my.news.host 119
Trying aa.bb.cc.dd...
Connected to my.news.host.
Escape character is '^]'.
200 my.news.host InterNetNews NNRP server INN 2.2.2 13-Dec-1999 ready (posting ok).
GROUP alt.test
211 232 222996 223235 alt.test
quit
205 .


После получения комманды "GROUP alt.test", новостной сервер ответил
"211 232 222996 223235 alt.test". 211 - определенный RFC спецификацией
код (говоря обычным языком - 212 - означает, что команда была
завершена с положительным результатом - смотрите документацию RFC для
более полной характеристики). Следующая цифра - 232 - колличество
имеющихся в текущий момент новых статей. 222996 - старых. 223235 -
всего статей. 232+222996 не равно 223235. Почему? Возможно,
недостающие семь статей были каким-либо образом удалены модератором
или самим автором.


В зависимости от сервера (public или private) вас могут попросить
идентифицироваться. Так-же возможно, что идентификация понадобиться
только при написании своих сообщений, а чтение может производиться без
этого.

<?php
//$cfgUser = "xxxxxx";
//$cfgPasswd = "yyyyyy";
$cfgNewsGroup = "alt.php";
// identification required on private server
if($cfgUser) {
fputs($usenet_handle, "AUTHINFO USER ".$cfgUser."n");
$tmp = fgets($usenet_handle, 1024);
fputs($usenet_handle, "AUTHINFO PASS ".$cfgPasswd."n");
$tmp = fgets($usenet_handle, 1024);
// check error
if($tmp != "281 Okrn") {
echo "502 Authentication errorn";
exit();
}
}
// select newsgroup
fputs($usenet_handle, "GROUP ".$cfgNewsGroup."n");
$tmp = fgets($usenet_handle, 1024);
if($tmp == "480 Authentication required for commandrn") {
echo "$tmpn";
exit();
}
$info = split(" ", $tmp);
$first = $info[2];
$last = $info[3];
print "First : $firstn";
print "Last : $lastn";
?>


Скачивание некоторых статей

Теперь мы имеем номер последней статьи, так что сейчас нам не составит
труда скачать десять последних статей. RFC977 спецификация допускает
использование комманды ARTICLE, как с номером статьи, так и Message ID
(Уникальный Номер Сообщения).

Будтье внимательны здесь - номер статьи отличен от Message ID. Если
статья опубликованна на нескольких серверах, то она несомненно будет
иметь разный номер оба раза, но одинаковый Message ID. Грубо говоря,
номер статьи - присваивается каждый раз по-новому на сервере, и может
меняться со временем; Message ID - у каждой статьи уникальный.

<?php
$cfgLimit = 10;
// upload last articles
$boucle=$last-$cfgLimit;
while ($boucle <= $last) {
set_time_limit(0);
fputs($usenet_handle, "ARTICLE $bouclen");
$article="";
$tmp = fgets($usenet_handle, 4096);
if(substr($tmp,0,3) != "220") {
echo "+----------------------+n";
echo "Error on article $bouclen";
echo "+----------------------+n";
}
else {
while($tmp!=".rn") {
$tmp = fgets($usenet_handle, 4096);
$article = $article.$tmp;
}
echo "+----------------------+n";
echo "Article $bouclen";
echo "+----------------------+n";
echo "$articlen";
}
$boucle++;
}
?>


Так-же благодаря комманде HEAD возможно получить только хэадер
(header) сообщения или-же только текст, используя команду BODY.


Отсоединяемся от сервера

Чтобы закрыть сессию с NNTP-сервером, просто закройте соккет используя
fclose() (аналагично закрытию фаила).


Больше информации о функции fclose() можно узнать здес:
http://www.php.net/manual/function.fclose.php


<?php
// close connexion
fclose($usenet_handle);
?>


Заключение

Мы только что видели как открыть, использовать и затем закрыть соккет
- для соединения с NNTP-сервером и получения некоторых статей из
новостных групп.

Для опубликования сообщения необходимо использовать POST комманду.


Примеры приложений работующих с новостными группами можно найти здесь:
http://www.phpindex.com/ng/




* Denis Roshchin
* Armel Fauveau
573 Прочтений •  [Использование сокетов в PHP (php socket nntp news)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Использование сокетов в PHP (php so... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка