|
|
|||||
Регистрация: Oct 2006
Адрес: https://twitter.com/Eric_Gurt
Сообщений: 393
|
Socket Server для Flash-игры на PHP
Собственно суть проблемы.
Есть 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 скрипта: (Ошибок и Warning нет, даже если без & запускать) После чего проверяю: и видно 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: Сбой подключения И после Я так понимаю подключение было - это уже хорошо. Но почему на другие порты не удается подключиться? Может дело в скриптах или настройке Ubuntu? Тем не менее в Windows 7 встроенный фаерволл вырубил полностью, но это не помогло. И вот еще скрипты которые я собственно и запускаю (вложения)
__________________
x << 2; |
|
|||||
Modus ponens
|
Зачем апач для сокетов? Какая-то очень сложная схема подключения... а зачем так сложно? Почему линукс из-под виндивса, а не наоборот (такой вариант изначально ущербный)? Я так понимаю это для тестов делается? - зачем вообще тогда в виртуализации запускать сервер, он точно так же и в виндовсе работать будет.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Oct 2006
Адрес: https://twitter.com/Eric_Gurt
Сообщений: 393
|
Да, для тестов. Обычный Apache для Windows решил не использовать потому как он периодически вылетает у меня на 7-ке, чего на XP раньше не было. Знакомый мне посоветовал Ubuntu, так как в конечном варианте спонсорский сервер будет тоже на ней запускаться.
В теории вроде бы все сделано верно, но почему такой способ может не работать
__________________
x << 2; |
|
|||||
Регистрация: Aug 2008
Сообщений: 258
|
Я вообще не понимаю зачем Windows. Вы с домашнего компа сервера делаете? Это какой-то Evil Edition.
|
|
|||||
Регистрация: May 2006
Адрес: Germany
Сообщений: 74
|
А вот я не согласен с предыдущими ораторами.
Например я плачу хостеру 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 и посмотрите на пакеты. пока |
|
|||||
Регистрация: Oct 2006
Адрес: https://twitter.com/Eric_Gurt
Сообщений: 393
|
Спасибо за помощь, но это не все
Комманда "netstat -an" не вывела портов 843 или 10014. Прослушивается 80 и еще куча других. Windows firewall выключен полностью, в Ubuntu сделал "iptables -F" (вроде как временное отключение firewall) и перезапустил скрипты... netstat не показал ничего нового, Telnet не достучался. Wireshark при попытке подключиться к серверу Telnet'ом выдал Вроде какой-то ответ есть с портов получается. То же самое пишет, если подключаться Telnet'ом когда на Ubuntu не запущены скрипты. При запуске скриптов ничего особого не возникает в Wireshark. В прикрепленном архиве пара php файлов запускающих сокет сервер, может быть в них проблема? socket_bind() делается на 127.0.0.1 это правильно?
__________________
x << 2; Последний раз редактировалось Eric Gurt; 09.10.2010 в 16:54. |
|
|||||
Регистрация: May 2006
Адрес: Germany
Сообщений: 74
|
Если "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 пользоваться можно ;-) |
|
|||||
Регистрация: Oct 2006
Адрес: https://twitter.com/Eric_Gurt
Сообщений: 393
|
Да не люблю я его) я его пока только 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
__________________
x << 2; |
|
|||||
Регистрация: May 2006
Адрес: Germany
Сообщений: 74
|
Я скопировал на свою 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] netstat -an его тоже видел: И работает твой скрипт так: он привязывается к порту 10014 и когда присоединяется новый клиент, начинает читать по 4096 байтов. Если нашел в них XML, то он умирает, т.к. у него нету класса Game. Если XML не нашлось, то он печатает [SocketServer] Exception и крутится дальше (причем он не сохраняет прочитанные до этого байты - и наверное зря). Последний раз редактировалось afarber; 09.10.2010 в 20:03. |
|
|||||
Регистрация: Aug 2008
Сообщений: 258
|
afarber
У меня на рабочей машине стоит на 1 винте Windows на другом Linux Gentoo... две полноценные ОС. И это очень удобно. |
Часовой пояс GMT +4, время: 01:52. |
|
« Предыдущая тема | Следующая тема » |
|
|