Actionscript TCP Socket не удается отправить сообщение для некоторых людей - PullRequest
2 голосов
/ 05 октября 2009

Я написал сокет-сервер, который взаимодействует с моей flash-игрой actionscript 3 с помощью класса Socket. Это TCP-соединение, которое, как я думал, будет означать, что он на 100% уверен, что отправляющее сообщение будет получено сервером, поскольку это делается на низком уровне. Таким образом, если сообщение не будет отправлено, оно отправит сообщение повторно.

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

Могу ли я что-нибудь сделать, чтобы убедиться, что сообщение отправляется правильно, и я ошибаюсь из-за того, что TCP на 100% безопасен, потому что сообщения должны пересылаться при сбое низкого уровня?

Ответы [ 4 ]

5 голосов
/ 15 октября 2009

Вы правы, что это обычная проблема, но проблема общая, не зависящая от вспышки. Я отправил сообщение, но оно так и не было получено, что мне делать? Вам необходимо убедиться, что код вашего клиента действительно отправил сообщение; вам нужно проверить, что сообщение покинуло клиентский компьютер; вам нужно проверить, что сообщение дошло до сервера; и вам нужно проверить, что приложение сервера получило сообщение. Вы также должны убедиться, что ваше соединение / сокет между клиентом и сервером все еще живы.

При попытке диагностировать эту проблему, предполагая, что сбой TCP является неправильным местом для начала. Если вы используете UDP, то история другая, потому что UDP не гарантирует доставку (но вы уже знали что, верно?).

Повторяя предыдущие предложения, вы должны использовать Wireshark (или эквивалентный), чтобы определить, покидает ли сообщение клиентский компьютер. Вы можете запустить на своем сервере, чтобы убедиться, что ничего смешного там не происходит; однако, если на стороне сервера действительно нет никаких следов сообщения, то вам нужно будет предоставить какую-то инструментальную часть на стороне клиента, чтобы увидеть, что там происходит.

3 голосов
/ 05 октября 2009

Вы всегда можете поиграть с tcpdump или wireshark , чтобы увидеть, что происходит на проводе. Если ваша проблема не на уровне TCP / IP, это слишком полезные инструменты для устранения неполадок в сети, чтобы их не изучать.

2 голосов
/ 12 октября 2009

Вы правы в своем понимании TCP, вроде. TCP предоставляет поток данных для вашего приложения, в который вы можете записывать данные, и он будет поступать и поступать по порядку. То есть, конечно, предполагая, что соединение не умирает, что может. Я бы предложил использовать такую ​​программу, как wireshark, поскольку Николай предложил определить, что на самом деле отправляется правильная информация и по соответствующему адресу. Затем я использовал бы wireshark на сервере, чтобы утверждать то же самое. Существуют ли какие-либо характеристики связи, которыми обладает Лицо Б, которые отличаются от Лица А или Вас? (беспроводной и т. д.)

1 голос
/ 09 октября 2009

Попробуйте отправить на сервер сообщения (используя собственный протокол) от Лица B с помощью nc

Если вы можете изолировать проблему в клиентской или серверной части сокетов AS3, это уже будет серьезным шагом.

Примечание: я успешно использовал сокеты Actionscript3 в проекте несколько месяцев назад, только немного сложная часть правильно настроила сервер политики домена.

Сумасшедшая идея: возможно перекомпилировать ядро ​​с этой опцией? Служба оповещения о сбрасывании сетевых пакетов (NET_DROP_MONITOR) Отказ от ответственности: я никогда не пробовал это ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...