Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Socket Server для Flash-игры на PHP (http://www.flasher.ru/forum/showthread.php?t=145483)

Eric Gurt 09.10.2010 11:25

Socket Server для Flash-игры на PHP
 
Вложений: 1
Собственно суть проблемы.
Есть Windwos 7, в VirtualBox'e крутится сервер Ubuntu с Apache, есть роутер для выхода в интернет с выделенным IP. Все настроено таким образом, что сайт в Apache виден из-вне по адресу 91.200.106.130 . Также настроен Forwarding в роутере с портов 80,843,10014 на Ubuntu, у которого есть свой внутри-сетевой IP (192.168.1.105).

Есть 2 скрипта на php для запуска сокет сервера на 843 порт для передачи crossdomain.xml , и на 10014 порт.

В Ubuntu через командную строку запускаю эти 2 скрипта:
Код:

php .../socketServer.php &
sudo php .../policySocketServer.php &

(Ошибок и Warning нет, даже если без & запускать)

После чего проверяю:
Код:

ps -aux | grep php
и видно 3 процесса один из которых "--color=auto php" а другие 2 - запущенные скрипты.

Так вот проблема: ни флэш ни Windows telnet не подключаются к портам 843 и 10014, ни по адресу внешнему (91.200.106.130), ни по внутри-сетевому (192.168.1.105).
Код:

Microsoft Telnet> o 91.200.106.130 10014
Подключение к 91.200.106.130...Не удалось открыть подключение к этому узлу, на порт 10014: Сбой подключения

На подключение на порт 80 оно долго думает и потом говорит
Код:

Нажмите любую клавишу...
И после
Код:

Подключение к 91.200.106.130...

Подключение к узлу утеряно.

Microsoft Telnet>

Я так понимаю подключение было - это уже хорошо. Но почему на другие порты не удается подключиться? Может дело в скриптах или настройке Ubuntu? Тем не менее в Windows 7 встроенный фаерволл вырубил полностью, но это не помогло.

И вот еще скрипты которые я собственно и запускаю (вложения)

wvxvw 09.10.2010 13:21

Зачем апач для сокетов? Какая-то очень сложная схема подключения... а зачем так сложно? Почему линукс из-под виндивса, а не наоборот (такой вариант изначально ущербный)? Я так понимаю это для тестов делается? - зачем вообще тогда в виртуализации запускать сервер, он точно так же и в виндовсе работать будет.

Eric Gurt 09.10.2010 14:10

Да, для тестов. Обычный Apache для Windows решил не использовать потому как он периодически вылетает у меня на 7-ке, чего на XP раньше не было. Знакомый мне посоветовал Ubuntu, так как в конечном варианте спонсорский сервер будет тоже на ней запускаться.
В теории вроде бы все сделано верно, но почему такой способ может не работать

membrilius 09.10.2010 14:17

Я вообще не понимаю зачем Windows. Вы с домашнего компа сервера делаете? Это какой-то Evil Edition.

afarber 09.10.2010 15:34

А вот я не согласен с предыдущими ораторами.

Например я плачу хостеру strato.de за 4-х процессорный сервер с CentOS Linux 5.5.

И в тоже время у меня дома под Windows XP и на другом под Windows 7 стоит VMWare Workstation и на нем виртуальная машина точно с таким же CentOS Linux, и все так же скофигурированно.

И это очень удобно, удобнее чем если бы у меня был Apache для Windows, PostgreSQL для Windows, Cygwin и т.д. (так я начинал). Если в каких-нибудь изменениях я не уверен, то делаю snapshot в VMWare или даже копирую всю VM на DVD-диски...

Жаль что у Вас не VMWare, а то я может быть помог.

Посмотрите "netstat -an", слушают ли программки (LISTENING) на нужных портах. Проверьте firewalls (и на Windows и на Linux: iptables -L)

Поставьте сниффер для Windows - Wireshark и посмотрите на пакеты.

пока

Eric Gurt 09.10.2010 16:20

Вложений: 1
Спасибо за помощь, но это не все :(
Комманда "netstat -an" не вывела портов 843 или 10014. Прослушивается 80 и еще куча других. Windows firewall выключен полностью, в Ubuntu сделал "iptables -F" (вроде как временное отключение firewall) и перезапустил скрипты... netstat не показал ничего нового, Telnet не достучался.

Wireshark при попытке подключиться к серверу Telnet'ом выдал
Вложение 25303
Вроде какой-то ответ есть с портов получается.
То же самое пишет, если подключаться Telnet'ом когда на Ubuntu не запущены скрипты. При запуске скриптов ничего особого не возникает в Wireshark.

В прикрепленном архиве пара php файлов запускающих сокет сервер, может быть в них проблема? socket_bind() делается на 127.0.0.1 это правильно?

afarber 09.10.2010 17:45

Если "netstat -an" не показывает LISTENING на порту 10014, то файервол и Wireshark пока смотреть не зачем ;-)

socket_bind на 127.0.0.1 скорее всего тоже неправильно, там наверное нужно 0.0.0.0 или хотя бы IP адрес Вашей VM.

И что стоит в /var/log/messages или куда у Вас php пишет (см. php.ini)?

пока

Добавлено через 15 минут
Кстати если любите telnet, то им и под Ubuntu пользоваться можно ;-)

Eric Gurt 09.10.2010 18:52

Вложений: 1
Да не люблю я его) я его пока только 1 день знаю))

При IP 91.200.106.130 (внешний выделенный IP) - "Warning: Unable to bind address" во время выполнения скриптов.

При "0.0.0.0" или "192.168.1.105" (внутренний IP виртуальной машнины) или "NULL" или "null" результат тот же что и раньше. "netstat -an" не видит портов, telnet ведет себя по прежнему.

Сделал "find / -name php.ini" и нашел 2 файла:
/etc/php5/cli/php.ini
/etc/php5/apache2/php.ini

Фразу "/var/log/messages" в них не нашел и запихнул обоих в .zip :rolleyes:

afarber 09.10.2010 19:52

Я скопировал на свою CentOS VM, поменял $ip = '0.0.0.0'; Запустил

Код:

php socketServer.php
[2010-10-10] [SocketServer] NEW CLIENT Resource id #7 [IP: 127.0.0.1]
[2010-10-10] [SocketServer] Exception: String could not be parsed as XML
[2010-10-10] [SocketServer] Exception: String could not be parsed as XML
[2010-10-10] [SocketServer] Exception: String could not be parsed as XML
[2010-10-10] [SocketServer] Exception: String could not be parsed as XML
[2010-10-10] [SocketServer] Exception: String could not be parsed as XML
[2010-10-10] [SocketServer] Exception: String could not be parsed as XML
[2010-10-10] [SocketServer] REMOVING CLIENT Resource id #7
[2010-10-10] [SocketServer] NEW CLIENT Resource id #8 [IP: 127.0.0.1]

(это я еще сделал telnet 127.0.0.1 10014 и впечатал туда <xml>blah</xml>)

netstat -an его тоже видел:

Код:

netstat -an| grep 100
tcp        0      0 0.0.0.0:10014              0.0.0.0:*                  LISTEN

И работает твой скрипт так: он привязывается к порту 10014 и когда присоединяется новый клиент, начинает читать по 4096 байтов. Если нашел в них XML, то он умирает, т.к. у него нету класса Game. Если XML не нашлось, то он печатает [SocketServer] Exception и крутится дальше (причем он не сохраняет прочитанные до этого байты - и наверное зря).

membrilius 09.10.2010 20:29

afarber

У меня на рабочей машине стоит на 1 винте Windows на другом Linux Gentoo... две полноценные ОС. И это очень удобно.


Часовой пояс GMT +4, время: 18:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.