Bind socket error 0x2740 astroneer

Legacy GM network_create_server error KerwinSneijders Guest I have been busy with multiplayer in gamemaker studio 1.4 for quite some time now. I use some scripts to make it easier to read. I do not use any extensions! (I can post those if needed) FYI: Yesterday everything worked. I did not change ANYTHING that had […]

Содержание

  1. Legacy GM network_create_server error
  2. KerwinSneijders
  3. KerwinSneijders
  4. chamaeleon
  5. KerwinSneijders
  6. chamaeleon
  7. The-any-Key
  8. KerwinSneijders
  9. chamaeleon
  10. KerwinSneijders
  11. Simple Gamers
  12. Bind socket error 0x2740 astroneer
  13. Описание ошибки 0x00002740
  14. Диагностика и устранение ошибки 0x00002740
  15. __________
  16. Последнее с форума
  17. Нужны ли на сайте VR игры? (виртуальной реальности)
  18. Помощь при скачивании
  19. ASTRONEER играть по сети и интернету Онлайн
  20. __________
  21. Случайная Сетевая Игра:
  22. Правила чата
  23. Последнее с форума
  24. Steam VS Lan
  25. Помощь при скачивании
  26. ASTRONEER играть по сети и интернету Онлайн
  27. Начинающему сетевому программисту
  28. Теория сокетов за 30 секунд для «dummies»
  29. Этап 0: Подключение всех необходимых библиотек Win32API для работы с сокетами
  30. Этап 1: Инициализация сокетных интерфейсов Win32API
  31. Этап 2: Создание сокета и его инициализация
  32. Этап 3: Привязка сокета к паре IP-адрес/Порт
  33. Этап 4 (для сервера): «Прослушивание» привязанного порта для идентификации подключений
  34. Этап 4 (для Клиента). Организация подключения к серверу
  35. Этап 5 (только для Сервера). Подтверждение подключения
  36. Этап 6: Передача данных между Клиентом и Сервером

Legacy GM network_create_server error

KerwinSneijders

Guest

I have been busy with multiplayer in gamemaker studio 1.4 for quite some time now.
I use some scripts to make it easier to read. I do not use any extensions! (I can post those if needed)

FYI: Yesterday everything worked. I did not change ANYTHING that had anything to do with the server!

Anyway:
I am creating the server like this:
The debug is in here because I was debugging my problem

I have searched all the code blocks (there are not a lot) and nothing changes the value of global.server, and nothing re-runs the script above.

PS: When I comment out the server creation the error is gone.
PS2: Changing the actual port to 5555 or 9391 or anything does not change anyhing. port 9398 is not in use on my pc either (when checked netstat -ao in CMD)

HELP IS REALLY APPRECIATED. I AM STUCK. (I hate posting on forums. I rather search myself. But after 3 hours. I gave up.)

EDIT:
After some tests it reruns the create_server script, even though it is not called anywhere except in the create event. Any Ideas.

KerwinSneijders

Guest

chamaeleon

Member

KerwinSneijders

Guest

That is the whole thing!? I have searched my whole project using «search in scripts» (this includes ALL GML language in the project (and even drag and drop)). NO CODE is changing the value. The only odd thin I noticed is that the script above is not running once. It runs 3 times. It litterly is not called ANYWHERE except for the create event (Also searched for it) and there is only 1 object once in the room (and in the project).

I did 2 debug messages this time, one before and one after everything happens (in the script) and you can see it runs 3 times. It is not executed anywhere. I HAVE NO CLUE what is going on, I am desperate and kind of afraid I have to redo/kill my project for this.

PS: saving the game to a new folder doesn’t affect anything, starting another server with the used port works fine and redoing the script from the one that does work (

chamaeleon

Member

Member

Can you post your project or only all the network codes so we can test and debug?

Maybe we can help.

If you are having a code executed more than the times it should executed something must be wrong in the way you call it.

A user input, a collision, something that make it repeteable until the end of the first script is executed (which i think is in any network event)

The-any-Key

Member

KerwinSneijders

Guest

Because I didn’t really understand what you meant.

I added the «string(id)» in front of the debug:

chamaeleon

Member

KerwinSneijders

Guest

And.. this happened the first time, the second time it said from the step event. I went checking and found something that I still don’t understand how it is related (a message to all connected clients except the server)

Anyway after commenting that out, the server was able to connect. but always connected twice and with 1 error (instead of the usual 2). I have spend another 2 hours commenting out codes that were unrelated (everything) but I tried. cCouldn’t find anything anymore so I rage quit. (I used the debug mode).

I took an old backup from far back, tested it, that one worked. Copied all the code except for 1 step event block (the one from above, that I thought was useless). Tested it, and it worked. Now, the point is. That same code blcok that I didn’t copy, WAS COMMENTED OUT THE ENTIRE 2 HOURS OF TESTING. So I had THE EXACT SAME PROJECT. (except for a fully commented out step code block) and now it does work. (TRUST ME, I copied, every script, every codeblock but that one step thing. and the old one still gave errors while the new one worked perfectly fine.. I am 99% sure this was Gamemaker, and not me. Because it was the day before I posted this (all good, and then, BAAM broken).

Even though I have deleted the full project, I still want to thank all of you (especially chamaeleon) for helping and suggesting the debug mode.
Thanks again.

Simple Gamers

Guest

Error (0x 2740): Can’t bind port
Setting SO_REUSEADDR and retrying..
Error (0x 271d): Can’t bind port even with SO_REUSEADDR
cannot bind port
-1
-1
Pause event has been registered for this frame
Pause event has been unregistered

I have that Error and How do i Fix it ?

Источник

Bind socket error 0x2740 astroneer

Добрый день! Уважаемые читатели IT портала Pyatilistnik.org. В прошлый раз мы с вами рассмотрели методы позволяющие протестировать загрузочную флешку перед работой, что порой очень обосновано. В сегодняшней публикации я вам покажу методы диагностики и траблшутинга при подключении к серверу 1С, где в ряде случаев я ловил ошибку 0x00002740 only one usage of each socket address. Думаю, что данный алгоритм действий будет полезен как начинающим, так уже и опытным администраторам. Давайте приступать.

Описание ошибки 0x00002740

Обратился ко мне один из разработчиков с вопросом не знаю ли я в чем может быть причина ошибки:

Диагностика и устранение ошибки 0x00002740

Выше я специально выделил две ошибки 10055 и 10048, так как они многое могут рассказать, обратимся к сайту Microsoft:

  • 1️⃣WSAEADDRINUSE 10048 — Адрес уже используется. — Как правило, разрешено использовать только один адрес сокета (протокол, IP-адрес или порт). Эта ошибка возникает, если приложение пытается привязать сокет к IP-адресу или порту, который уже использовался для существующего сокета, или сокета, который был закрыт неправильно, или тот, который все еще находится в процессе закрытия.
  • 2️⃣WSAENOBUFS 10055- Буферное пространство недоступно. Не удалось выполнить операцию сокета, так как в системе недостаточно места в буфере или из-за переполнения очереди.

Понимая, что нет свободных сокетов можно двигаться дальше, мы кстати такое уже ловили, когда у нас просто останавливалась служба 1С, советую почитать. Открываем на сервере командную строку в режиме администратора и вводим команду:

В результате я увидел, что огромное количество динамических портов с 49152 по 65535 были заняты приложением от Касперского.

Если открыть просмотр событий и посмотреть логи, то была огромная куча ошибок ID 15005.

Так же можно увидеть, что многие программы ждут когда освободятся динамические порты, поэтому и соединения с сервером 1С, то были, то пропадали.

Так, что виновник найден. У вас варианты:

  • Перезагрузиться и до настроить Касперского, чтобы он не создавал такое количество соединений
  • Исключить определенные порты, чтобы их не занимали и отдать это программа, как мы делали с 1С, ссылка выше в середине статьи.

Источник

__________

Последнее с форума

ответ от: 3style, 10-01-2023, 19:40

Нужны ли на сайте VR игры? (виртуальной реальности)

Помощь при скачивании

ASTRONEER играть по сети и интернету Онлайн

Изменена: 6-12-2022, 20:04. | Причина: >>> v1.26.128.0

Обзор игры ASTRONEER и сетевой режим

Описание игры: Astroneer — исследовательская игра про отдаленные планеты, с огромным риском для жизни и хорошей платой за свои труды.

Способ Игры: Steam (по приглашению).

Язык в Игре: Русский Текст.

Жанр: Экшены, Приключенческие игры, Совместное Прохождение.

Максимальное количество игроков: 4.

Одиночная игра: Доступна.


НАСТРОЙКА ДЛЯ СЕТЕВОЙ ИГРЫ:

1.1) Скачать игру ASTRONEER торрент (последняя версия repack)

Скачать STRONEER-Multiplayer-Fix-Online-v7

Подходит на любую версию.

Запуск Astroneer по сети в мультиплеер:

2.1) Открываем Steam, входим в ЛЮБОЙ аккаунт.

2.2) Запуск игры осуществляется от имени админа: Astro.exe.

Создание сервера к Игре:

3.1) Начинаем новую игру или запускаем уже начатую (с помощью выбора шатла) => Приземляемся и отправляем приглашение через список друзей.

Подключение к серверам:

4.1) Принимаем приглашение и выбираем любого из персонажей.

Доп. информация и возможные проблемы:

— Русский язык включен по умолчанию.

Ник в игре зависит от ника в стиме.

— Путь к сохранениям : C:Users AppDataLocalAstro

— Игра тестировалась на Win 10 x64.

— Страница игры Стиме : Astroneer

— После ознакомления КУПИТЕ игру, чтобы поддержать разработчика!

Источник

__________

Случайная Сетевая Игра:

Правила чата

Последнее с форума

ответ от: FreeTP-Pioneer, Сегодня, 10:29

ответ от: 3style, 10-01-2023, 19:40

Steam VS Lan

Помощь при скачивании

ASTRONEER играть по сети и интернету Онлайн

Изменена: FreeTP-Pioneer, 6-12-2022, 20:04.
Причина: >>> v1.26.128.0

Обзор игры ASTRONEER и сетевой режим

Описание игры: Astroneer — исследовательская игра про отдаленные планеты, с огромным риском для жизни и хорошей платой за свои труды.

Способ Игры: Steam (по приглашению).

Язык в Игре: Русский Текст.

Жанр: Экшены, Приключенческие игры, Совместное Прохождение.

Максимальное количество игроков: 4.

Одиночная игра: Доступна.


НАСТРОЙКА ДЛЯ СЕТЕВОЙ ИГРЫ:

1.1) Скачать игру ASTRONEER торрент (последняя версия repack)

Скачать STRONEER-Multiplayer-Fix-Online-v7

Подходит на любую версию.

Запуск Astroneer по сети в мультиплеер:

2.1) Открываем Steam, входим в ЛЮБОЙ аккаунт.

2.2) Запуск игры осуществляется от имени админа: Astro.exe.

Создание сервера к Игре:

3.1) Начинаем новую игру или запускаем уже начатую (с помощью выбора шатла) => Приземляемся и отправляем приглашение через список друзей.

Подключение к серверам:

4.1) Принимаем приглашение и выбираем любого из персонажей.

Доп. информация и возможные проблемы:

— Русский язык включен по умолчанию.

Ник в игре зависит от ника в стиме.

— Путь к сохранениям : C:Users AppDataLocalAstro

Источник

Начинающему сетевому программисту

Тема сетевого программирования является для разработчиков одной из важнейших в современном цифровом мире. Правда, надо признать, что большая часть сетевого программирования сосредоточена в области написания скриптов исполнения для web-серверов на языках PHP, Python и им подобных. Как следствие — по тематике взаимодействия клиент-сервер при работе с web-серверами написаны терабайты текстов в Интернете. Однако когда я решил посмотреть, что же имеется в Интернете по вопросу программирования сетевых приложений с использованием голых сокетов, то обнаружил интересную вещь: да, такие примеры конечно же есть, но подавляющее большинство написано под *nix-системы с использованием стандартных библиотек (что понятно – в области сетевого программирования Microsoft играет роль сильно отстающего и менее надежного «собрата» *nix-ов). Другими словами все эти примеры просто не будут работать под Windows. При определенных танцах с бубнами код сетевого приложения под Linux можно запустить и под Windows, однако это еще более запутает начинающего программиста, на которого и нацелены большинство статей в Интернете с примерами использования сокетов.

Ну а что же с документацией по работе с сетевыми сокетами в Windows от самой Microsoft? Парадоксальность ситуации заключается в том, что непосредственно в самой документации приведено очень беглое описание функций и их использования, а в примерах имеются ошибки и вызовы старых «запрещенных» современными компиляторами функций (к примеру, функция inet_addr() — https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-listen ) — такие функции конечно же можно вызывать, заглушив бдительность компилятора через #define-директивы, однако такой подход является полным зашкваром для любого даже начинающего программиста и категорически не рекомендуется к использованию. Более того, фрагмент кода в примере от Microsoft по ссылке выше:

вообще не заработает, т.к. полю Service.sin_addr.s_addr невозможно присвоить значение целого типа, которое возвращает функция inet_addr (возвращает unsigned long). То есть это ни много, ни мало — ошибка! Можно себе представить, сколько пытливых бойцов полегло на этом месте кода.

В общем, посмотрев на всё это, я решил написать базовую статью по созданию простейшего клиент-сервер приложения на С++ под Windows с детальным описанием всех используемых функций. Это приложение будет использовать Win32API и делать незамысловатую вещь, а именно: передавать сообщения от клиента к серверу и обратно, или, иначе говоря – напишем программу по реализации чата для двух пользователей.

Сразу оговорюсь, что статья рассчитана на начинающих программистов, которые только входят в сетевое программирование под Windows. Необходимые навыки – базовое знание С++, а также теоретическая подготовка по теме сетевых сокетов и стека технологии TCP/IP.

Теория сокетов за 30 секунд для «dummies»

Начну всё-таки немного с теории в стиле «for dummies». В любой современной операционной системе, все процессы инкапсулируются, т.е. скрываются друг от друга, и не имеют доступа к ресурсам друг друга. Однако существуют специальные разрешенные способы взаимодействия процессов между собой. Все эти способы взаимодействия процессов можно разделить на 3 группы: (1) сигнальные, (2) канальные и (3) разделяемая память.

Когда мы говорим про работу сетевого приложения, то всегда подразумеваем взаимодействие процессов: процесс 1 (клиент) пытается что-то послать или получить от Процесса 2 (сервер). Наиболее простым и понятным способом организации сетевого взаимодействия процессов является построение канала между этими процессами. Именно таким путём и пошли разработчики первых сетевых протоколов. Получившийся способ взаимодействия сетевых процессов в итоге оказался многоуровневым: основной программный уровень — стек сетевой технологии TCP/IP, который позволяет организовать эффективную доставку пакетов информации между различными машинами в сети, а уже на прикладном уровне тот самый «сокет» позволяет разобраться какой пакет какому процессу доставить на конкретной машине.

Иными словами «сокет» — это «розетка» конкретного процесса, в которую надо подключиться, чтобы этому процессу передать какую-либо информацию. Договорились, что эта «розетка» в Сети описывается двумя параметрами – IP-адресом (для нахождения машины в сети) и Портом подключения (для нахождения процесса-адресата на конкретной машине).

Для того, чтобы сокеты заработали под Windows, необходимо при написании программы пройти следующие Этапы:

Инициализация сокетных интерфейсов Win32API.

Инициализация сокета, т.е. создание специальной структуры данных и её инициализация вызовом функции.

«Привязка» созданного сокета к конкретной паре IP-адрес/Порт – с этого момента данный сокет (его имя) будет ассоциироваться с конкретным процессом, который «висит» по указанному адресу и порту.

Для серверной части приложения: запуск процедуры «прослушки» подключений на привязанный сокет.

Для клиентской части приложения: запуск процедуры подключения к серверному сокету (должны знать его IP-адрес/Порт).

Акцепт / Подтверждение подключения (обычно на стороне сервера).

Обмен данными между процессами через установленное сокетное соединение.

Закрытие сокетного соединения.

Итак, попытаемся реализовать последовательность Этапов, указанных выше, для организации простейшего чата между клиентом и сервером. Запускаем Visual Studio, выбираем создание консольного проекта на С++ и поехали.

Этап 0: Подключение всех необходимых библиотек Win32API для работы с сокетами

Сокеты не являются «стандартными» инструментами разработки, поэтому для их активизации необходимо подключить ряд библиотек через заголовочные файлы, а именно:

WinSock2.h – заголовочный файл, содержащий актуальные реализации функций для работы с сокетами.

WS2tcpip.h – заголовочный файл, который содержит различные программные интерфейсы, связанные с работой протокола TCP/IP (переводы различных данных в формат, понимаемый протоколом и т.д.).

Также нам потребуется прилинковать к приложению динамическую библиотеку ядра ОС: ws2_32.dll. Делаем это через директиву компилятору: #pragma comment(lib, “ws2_32.lib”)

Ну и в конце Этапа 0 подключаем стандартные заголовочные файлы iostream и stdio.h

Итого по завершению Этапа 0 в Серверной и Клиентской частях приложения имеем:

Обратите внимание: имя системной библиотеки ws2_32.lib именно такое, как это указано выше. В Сети есть различные варианты написания имени данной библиотеки, что, возможно, связано иным написанием в более ранних версиях ОС Windows. Если вы используете Windows 10, то данная библиотека называется именно ws2_32.lib и находится в стандартной папке ОС: C:/Windows/System32 (проверьте наличие библиотеки у себя, заменив расширение с “lib” на “dll”).

Этап 1: Инициализация сокетных интерфейсов Win32API

Прежде чем непосредственно создать объект сокет, необходимо «запустить» программные интерфейсы для работы с ними. Под Windows это делается в два шага следующим образом:

Нужно определить с какой версией сокетов мы работаем (какую версию понимает наша ОС) и

Запустить программный интерфейс сокетов в Win32API. Ну либо расстроить пользователя тем, что ему не удастся поработать с сокетами до обновления системных библиотек

Первый шаг делается с помощью создания структуры типа WSADATA , в которую автоматически в момент создания загружаются данные о версии сокетов, используемых ОС, а также иная связанная системная информация: WSADATA wsData;

Второй шаг – непосредственный вызов функции запуска сокетов с помощью WSAStartup() . Упрощённый прототип данной функции выглядит так:

int WSAStartup (WORD , WSADATA* )

Первый аргумент функции – указание диапазона версий реализации сокетов, которые мы хотим использовать и которые должны быть типа WORD . Этот тип данных является внутренним типом Win32API и представляет собой двухбайтовое слово (аналог в С++: unsigned short ). Функция WSAStartup() просит вас передать ей именно WORD , а она уже разложит значение переменной внутри по следующему алгоритму: функция считает, что в старшем байте слова указана минимальная версия реализации сокетов, которую хочет использовать пользователь, а в младшем – максимальная. По состоянию на дату написания этой статьи (октябрь 2021 г.) актуальная версия реализации сокетов в Windows – 2. Соответственно, желательно передать и в старшем, и в младшем байте число 2. Для того, чтобы создать такую переменную типа WORD и передать в её старший и младший байты число 2, можно воспользоваться Win32API функцией MAKEWORD(2,2) .

Можно немного повыёживаться и вспомнить (или полистать MSDN), что функция MAKEWORD(x,y) строит слово по правилу y .Нетрудно посчитать, что при x=y=2 значение функции MAKEWORD в десятичном виде будет 514 . Можешь смело передать в WSAStartup() это значение, и всё будет работать.

Второй аргумент функции – просто указатель на структуру WSADATA , которую мы создали ранее и в которую подгрузилась информация о текущей версии реализации сокетов на данной машине.

WSAStartup() в случае успеха возвращает 0, а в случае каких-то проблем возвращает код ошибки, который можно расшифровать последующим вызовом функции WSAGetLastError() .

Важное замечание: поскольку сетевые каналы связи и протоколы в теории считаются ненадежными (это отдельный большой разговор), то критически важно для сетевого приложения анализировать все возможные ошибки, которые возникают в процессе вызовов сокетных функций. По этой причине каждый вызов таких функций мы будем анализировать на ошибки и в случае их обнаружения завершать сетевые сеансы и закрывать открытые сокеты. Используем для этого переменную erStat типа int .

Также важно после работы приложения обязательно закрыть использовавшиеся сокеты с помощью функции closesocket(SOCKET ) и деинициализировать сокеты Win32API через вызов метода WSACleanup() .

Итого код Этапа 1 следующий:

Да, кода мало, а описания много. Так обычно и бывает, когда хочешь глубоко в чем-то разобраться. Так что на лабе будешь в первых рядах.

Этап 2: Создание сокета и его инициализация

Сокет в С++ – это структура данных (не класс) типа SOCKET. Её инициализация проводится через вызов функции socket() , которая привязывает созданный сокет к заданной параметрами транспортной инфраструктуре сети. Выглядит прототип данной функции следующим образом:

SOCKET socket(int , int , int )

Семейство адресов: сокеты могут работать с большим семейством адресов. Наиболее частое семейство – IPv4. Указывается как AF_INET .

Тип сокета: обычно задается тип транспортного протокола TCP ( SOCK_STREAM ) или UDP ( SOCK_DGRAM ). Но бывают и так называемые «сырые» сокеты, функционал которых сам программист определяет в процессе использования. Тип обозначается SOCK_RAW

Тип протокола: необязательный параметр, если тип сокета указан как TCP или UDP – можно передать значение 0. Тут более детально останавливаться не будем, т.к. в 95% случаев используются типы сокетов TCP/UDP.

При необходимости подробно почитать про функцию socket() можно здесь.

Функция socket() возвращает дескриптор с номером сокета, под которым он зарегистрирован в ОС. Если же инициализировать сокет по каким-то причинам не удалось – возвращается значение INVALID_SOCKET .

Код Этапа 2 будет выглядеть так:

Этап 3: Привязка сокета к паре IP-адрес/Порт

Сокет уже существует, но еще неполноценный, т.к. ему не назначен внешний адрес, по которому его будут находить транспортные протоколы по заданию подключающихся процессов, а также не назначен порт, по которому эти подключающиеся процессы будут идентифицировать процесс-получатель.

Такое назначение делается с помощью функции bind() , имеющей следующий прототип:

int bind(SOCKET , sockaddr* , int )

Функция bind() возвращает 0 , если удалось успешно привязать сокет к адресу и порту, и код ошибки в ином случае, который можно расшифровать вызовом WSAGetLastError() — см. итоговый код Этапа 3 далее.

Тут надо немножно притормозить и разобраться в том, что за такая структура типа sockaddr передается вторым аргументом в функцию bind() . Она очень важна, но достаточно запутанная.

Итак, если посмотреть в её внутренности, то выглядят они очень просто: в ней всего два поля – (1) первое поле хранит семейство адресов, с которыми мы уже встречались выше при инициализации сокета, а (2) второе поле хранит некие упакованные последовательно и упорядоченные данные в размере 14-ти байт. Бессмысленно разбираться детально как именно эти данные упакованы, достаточно лишь понимать, что в этих 14-ти байтах указан и адрес, и порт, а также дополнительная служебная информация для других системных функций Win32API .

Но как же явно указать адрес и порт для привязки сокета? Для этого нужно воспользоваться другой структурой, родственной sockaddr , которая легко приводится к этому типу — структурой типа sockaddr_in .

В ней уже более понятные пользователю поля, а именно:

Семейство адресов — опять оно ( sin_family )

Вложенная структура типа in_addr , в которой будет храниться сам сетевой адрес ( sin_addr )

Технический массив на 8 байт ( sin_zero[8] )

При приведении типа sockaddr_in к нужному нам типу sockaddr для использования в функции bind() поля Порт (2 байта), Сетевой адрес (4 байта) и Технический массив (8 байт) как раз в сумме дают нам 14 байт, помещающихся в 14 байт, находящихся во втором поле структуры sockaddr . Первые поля у указанных типов совпадают – это семейство адресов сокетов (указываем AF_INET ). Из этого видно, что структуры данных типа sockaddr и sockaddr_in тождественны, содержат одну и ту же информацию, но в разной форме для разных целей.

Соответственно, ввод данных для структуры типа sockaddr_in выглядит следующим образом:

Создание структуры типа sockaddr_in : sockaddr_in servInfo;

Заполнение полей созданной структуры servInfo

servInfo.sin_port = htons( ); порт всегда указывается через вызов функции htons() , которая переупаковывает привычное цифровое значение порта типа unsigned short в побайтовый порядок понятный для протокола TCP/IP (протоколом установлен порядок указания портов от старшего к младшему байту или «big-endian»).

Далее нам надо указать сетевой адрес для сокета. Тип этого поля – структура типа in_addr , которая по своей сути представляет просто особый «удобный» системным функциям вид обычного строчного IPv4 адреса. Таким образом, чтобы указать этому полю обычный IPv4 адрес, его нужно сначала преобразовать в особый числовой вид и поместить в структуру типа in_addr .

Благо существует функция, которая переводит обычную строку типа char[] , содержащую IPv4 адрес в привычном виде с точками-разделителями в структуру типа in_addr – функция inet_pton() . Прототип функции следующий:

int inet_pton(int , char[] , in_addr* ).

В случае ошибки функция возвращает значение меньше 0.

Соответственно, если мы хотим привязать сокет к локальному серверу, то наш код по преобразованию IPv4 адреса будет выглядеть так:

erStat = inet_pton(AF_INET, “127.0.0.1”, &ip_to_num);

Результат перевода IP-адреса содержится в структуре ip_to_num. И далее мы передаем уже в нашу переменную типа sockaddr_in значение преобразованного адреса:

Вся нужная информация для привязки сокета теперь у нас есть, и она хранится в структуре servInfo . Можно смело вызывать функцию bind() , не забыв при этом привести servInfo из типа sockaddr_in в требуемый функции sockaddr* . Тогда итоговый код Этапа 3 (слава богу закончили) выглядит так:

Этап 4 (для сервера): «Прослушивание» привязанного порта для идентификации подключений

Серверная часть готова к прослушке подключающихся «Клиентов». Для того, чтобы реализовать данный этап, нужно вызвать функцию listen() , прототип которой:

int listen(SOCKET , int )

Второй аргумент: максимально возможное число подключений устанавливается через передачу параметр SOMAXCONN (рекомендуется). Если нужно установить ограничения на количество подключений – нужно указать SOMAXCONN_HINT(N) , где N – кол-во подключений. Если будет подключаться больше пользователей, то они будут сброшены.

После вызова данной функции исполнение программы приостанавливается до тех пор, пока не будет соединения с Клиентом, либо пока не будет возвращена ошибка прослушивания порта. Код Этапа 4 для Сервера:

Этап 4 (для Клиента). Организация подключения к серверу

Код для Клиента до текущего этапа выглядит даже проще: необходимо исполнение Этапов 0, 1 и 2. Привязка сокета к конкретному процессу ( bind() ) не требуется, т.к. сокет будет привязан к серверному Адресу и Порту через вызов функции connect() (по сути аналог bind() для Клиента). Собственно, после создания и инициализации сокета на клиентской стороне, нужно вызвать указанную функцию connect() . Её прототип:

int connect(SOCKET , sockaddr* , int )

Функция возвращает 0 в случае успешного подключения и код ошибки в ином случае.

Процедура по добавлению данных в структуру sockaddr аналогична тому, как это делалось на Этапе 3 для Сервера при вызове функции bind() . Принципиально важный момент – в эту структуру для клиента должна заноситься информация о сервере, т.е. IPv4-адрес сервера и номер «слушающего» порта на сервере.

Этап 5 (только для Сервера). Подтверждение подключения

После начала прослушивания (вызов функции listen() ) следующей функцией должна идти функция accept() , которую будет искать программа после того, как установится соединение с Клиентом. Прототип функции accept() :

SOCKET accept(SOCKET , sockaddr* , int* )

Функция accept() возвращает номер дескриптора, под которым зарегистрирован сокет в ОС. Если произошла ошибка, то возвращается значение INVALID_SOCKET .

Если подключение подтверждено, то вся информация по текущему соединению передаётся на новый сокет, который будет отвечать со стороны Сервера за конкретное соединение с конкретным Клиентом. Перед вызовом accept() нам надо создать пустую структуру типа sockaddr_in , куда запишутся данные подключившегося Клиента после вызова accept() . Пример кода:

Всё, соединение между Клиентом и Сервером установлено! Самое время попробовать передать информацию от Клиента к Серверу и обратно. Как мы в начале и договорились, мы будет реализовывать простейший чат между ними.

Этап 6: Передача данных между Клиентом и Сервером

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

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

Рассмотрим прототипы функций recv() и send() :

int recv(SOCKET , char[] , int , )

int send(SOCKET , char[] , int , )

Флаги в большинстве случаев игнорируются – передается значение 0.

Функции возвращают количество переданных/полученных по факту байт.

Как видно из прототипов, по своей структуре и параметрам эти функции совершенно одинаковые. Что важно знать:

и та, и другая функции не гарантируют целостности отправленной/полученной информации. Это значит, что при реализации прикладных задач по взаимодействию Клиента и Сервера с их использованием требуется принимать дополнительные меры для контроля того, что все посланные байты действительно посланы и, что еще более важно, получены в том же объеме на другой стороне

предельно внимательно надо относиться к параметру «размер буфера». Он должен в точности равняться реальному количеству передаваемых байт. Если он будет отличаться, то есть риск потери части информации или «замусориванию» отправляемой порции данных, что ведет к автоматической поломке данных в процессе отправки/приёма. И совсем замечательно будет, если размер буфера по итогу работы функции равен возвращаемому значению функции – размеру принятых/отправленных байт.

В качестве буфера рекомендую использовать не классические массивы в С-стиле, а стандартный класс С++ типа char, т.к. он показал себя как более надежный и гибкий механизм при передаче данных, в особенности при передаче текстовых строк, где важен терминальный символ и «чистота» передаваемого массива.

Сама по себе упаковка и отправка данных делается элементарным использованием функций чтения всей строки до нажатия кнопки Ввода — fgets() с последующим вызовом функции send() , а на другой стороне — приёмом информации через recv() и выводом буфера на экран через cout

Процесс непрерывного перехода от send() к recv() и обратно реализуется через бесконечный цикл, из которого совершается выход по вводу особой комбинации клавиш. Пример блока кода для Серверной части:

Пришло время показать итоговый рабочий код для Сервера и Клиента. Чтобы не загромождать и так большой текст дополнительным кодом, даю ссылки на код на GitHub:

Несколько важных финальных замечаний:

В итоговом коде я не использую проверку на точное получение отосланной информации, т.к. при единичной (не циклической) отсылке небольшого пакета информации накладные расходы на проверку его получения и отправку ответа будут выше, чем выгоды от такой проверки. Иными словами – такие пакеты теряются редко, а проверять их целостность и факт доставки очень долго.

При тестировании примера также видно, что чат рабочий, но очень уж несовершенный. Наиболее проблемное место – невозможность отправить сообщение пока другая сторона не ответила на твоё предыдущее сообщение. Суть проблемы в том, что после отсылки сообщения сторона-отправитель вызывает функцию recv(), которая, как я писал выше, блокирует исполнение последующего кода, в том числе блокирует вызов прерываний для осуществления ввода. Это приводит к тому, что набирать сообщение и что-то отправлять невозможно до тех пор, пока процесс не получит ответ от другой стороны, и вызов функции recv() не будет завершен. Благо введенная информация с клавиатуры не будет потеряна, а, накапливаясь в системном буфере ввода/вывода, будет выведена на экран как только блокировка со стороны recv() будет снята. Таким образом, мы реализовали так называемый прямой полудуплексный канал связи. Сделать его полностью дуплексным в голой сокетной архитектуре достаточно нетривиальная задача, частично решаемая за счет создания нескольких параллельно работающих потоков или нитей (threads) исполнения. Один поток будет принимать информацию, а второй – отправлять.

В последующих статьях я покажу реализацию полноценного чата между двумя сторонами (поможет разобраться в понятии «нити процесса»), а также покажу полноценную реализацию прикладного протокола по копированию файлов с Сервера на Клиент.

Источник

Содержание

  1. Legacy GM network_create_server error
  2. KerwinSneijders
  3. KerwinSneijders
  4. chamaeleon
  5. KerwinSneijders
  6. chamaeleon
  7. The-any-Key
  8. KerwinSneijders
  9. chamaeleon
  10. KerwinSneijders
  11. Simple Gamers
  12. Windows Deployment Services service will not start (Error 0x2740 )
  13. Bind socket error 0x2740 astroneer
  14. Socket: bind error. why??

Legacy GM network_create_server error

KerwinSneijders

Guest

I have been busy with multiplayer in gamemaker studio 1.4 for quite some time now.
I use some scripts to make it easier to read. I do not use any extensions! (I can post those if needed)

FYI: Yesterday everything worked. I did not change ANYTHING that had anything to do with the server!

Anyway:
I am creating the server like this:
The debug is in here because I was debugging my problem

I have searched all the code blocks (there are not a lot) and nothing changes the value of global.server, and nothing re-runs the script above.

PS: When I comment out the server creation the error is gone.
PS2: Changing the actual port to 5555 or 9391 or anything does not change anyhing. port 9398 is not in use on my pc either (when checked netstat -ao in CMD)

HELP IS REALLY APPRECIATED. I AM STUCK. (I hate posting on forums. I rather search myself. But after 3 hours. I gave up.)

EDIT:
After some tests it reruns the create_server script, even though it is not called anywhere except in the create event. Any Ideas.

KerwinSneijders

Guest

chamaeleon

Member

KerwinSneijders

Guest

That is the whole thing!? I have searched my whole project using «search in scripts» (this includes ALL GML language in the project (and even drag and drop)). NO CODE is changing the value. The only odd thin I noticed is that the script above is not running once. It runs 3 times. It litterly is not called ANYWHERE except for the create event (Also searched for it) and there is only 1 object once in the room (and in the project).

I did 2 debug messages this time, one before and one after everything happens (in the script) and you can see it runs 3 times. It is not executed anywhere. I HAVE NO CLUE what is going on, I am desperate and kind of afraid I have to redo/kill my project for this.

PS: saving the game to a new folder doesn’t affect anything, starting another server with the used port works fine and redoing the script from the one that does work (

chamaeleon

Member

Member

Can you post your project or only all the network codes so we can test and debug?

Maybe we can help.

If you are having a code executed more than the times it should executed something must be wrong in the way you call it.

A user input, a collision, something that make it repeteable until the end of the first script is executed (which i think is in any network event)

The-any-Key

Member

KerwinSneijders

Guest

Because I didn’t really understand what you meant.

I added the «string(id)» in front of the debug:

chamaeleon

Member

KerwinSneijders

Guest

And.. this happened the first time, the second time it said from the step event. I went checking and found something that I still don’t understand how it is related (a message to all connected clients except the server)

Anyway after commenting that out, the server was able to connect. but always connected twice and with 1 error (instead of the usual 2). I have spend another 2 hours commenting out codes that were unrelated (everything) but I tried. cCouldn’t find anything anymore so I rage quit. (I used the debug mode).

I took an old backup from far back, tested it, that one worked. Copied all the code except for 1 step event block (the one from above, that I thought was useless). Tested it, and it worked. Now, the point is. That same code blcok that I didn’t copy, WAS COMMENTED OUT THE ENTIRE 2 HOURS OF TESTING. So I had THE EXACT SAME PROJECT. (except for a fully commented out step code block) and now it does work. (TRUST ME, I copied, every script, every codeblock but that one step thing. and the old one still gave errors while the new one worked perfectly fine.. I am 99% sure this was Gamemaker, and not me. Because it was the day before I posted this (all good, and then, BAAM broken).

Even though I have deleted the full project, I still want to thank all of you (especially chamaeleon) for helping and suggesting the debug mode.
Thanks again.

Simple Gamers

Guest

Error (0x 2740): Can’t bind port
Setting SO_REUSEADDR and retrying..
Error (0x 271d): Can’t bind port even with SO_REUSEADDR
cannot bind port
-1
-1
Pause event has been registered for this frame
Pause event has been unregistered

I have that Error and How do i Fix it ?

Источник

Windows Deployment Services service will not start (Error 0x2740 )

Starting Windows Deployment Services on a recently assigned Distribution Point for System Center Configuration Manager, I received the following error in the Application Event log on the DP:

An error occurred while trying to create the UDP endpoint for WDSPXE provider on interface x.x.x.x:67. This can happen if the network interface was disabled or changed, or some other application is already using the port. The provider will not be able to receive requests on this interface.

Error Information: 0x2740

This was because the DP was setup as a DHCP server and for WDS. Unfortunately WDSUTIL /set-server /UseDHCPPorts:No did not work. The fix was to perform the following registry change:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWDSServerProvidersWDSPXE
Set the registry value to: UseDHCPPorts = 0


The service then started without any issues.

Note: Another thing to remember, is that if you are running your WDS server on your DHCP server, you will need to set the 060 option in your DHCP Server Options. From a command prompt run the following command:WDSUTIL /set-server /DHCPOption60:yes

Источник

Bind socket error 0x2740 astroneer

Сообщения: 1521
Благодарности: 48

Petya V4sechkin, в общем проблема оказалась в безобидном VNC-сервере. Он работает как служба.

Не понимаю, чем мог помешать VNC-сервер? Он занимает конкретные порты 5800 и 5900. И все.

А причем тут вышеуказанный порт 10048 тогда?

Каждый раз тушить VCN как-то нехорошо.

Сообщения: 52552
Благодарности: 15230

Конфигурация компьютера
Материнская плата: ASUS P8Z77-V LE PLUS
HDD: Samsung SSD 850 PRO 256 Гб, WD Green WD20EZRX 2 Тб
Звук: Realtek ALC889 HD Audio
CD/DVD: ASUS DRW-24B5ST
ОС: Windows 8.1 Pro x64
Прочее: корпус: Fractal Design Define R4

А причем тут вышеуказанный порт 10048 тогда?

Это не порт, а код ошибки Winsock.

Он занимает конкретные порты 5800 и 5900

Это сообщение посчитали полезным следующие участники:

Порты можно изменить в настройках. »

Изменил в на сервере VNC порт 5800 на 5801 — теперь проблемная программа работает.
Но что интересно, то запущенный процесс от этой программы (TransData.exe) не занимает ни один порт, о чем свидетельствует netstat -aon. Также юзал tcpview — там процесс TransData.exe не отображается.

Т.е. может быть такое, что при запуске программа смотрит наличия доступа на порт 5800 и если его нет, то не стартует. Иначе же запускается, но порт не занимает.

?

Сообщения: 52552
Благодарности: 15230

Конфигурация компьютера
Материнская плата: ASUS P8Z77-V LE PLUS
HDD: Samsung SSD 850 PRO 256 Гб, WD Green WD20EZRX 2 Тб
Звук: Realtek ALC889 HD Audio
CD/DVD: ASUS DRW-24B5ST
ОС: Windows 8.1 Pro x64
Прочее: корпус: Fractal Design Define R4

не занимает ни один порт, о чем свидетельствует netstat -aon. Также юзал tcpview

Это сообщение посчитали полезным следующие участники:

Hi!
This code wants to simulate a possible answer of a server, to an
application of connection aside a client.
The server has to accept the connection and send a message with its
name.
The all through socket.

The program DOESN’T HAVE errors or warnings.

I have a problem in the function «bind» (what I have underlined with
of the «- «) because its return value is «-1» (therefore error!).
I don’t understand because the function return this value.

Can you help me?
Thank’s for all.

#include
#include
#include
#include
#include

main()
<
/* apertura connessione lato client */
int taddr_n, tport_n;
struct sockaddr_in saddr, caddr;
char *buffer;
int result=0,addrlen=0;
SOCKET s,s1;
WSADATA data; // inizializzo la variabile che contiene le primitive
di Winsock
WORD p;
int err=0;
p=MAKEWORD(2,0); // creo la variabile p che contiene la versione
della wsock32.dll
err=WSAStartup(p,&data); // inizializzo la wsock32.dll verificandone
la mancanza di errori

/* creazione socket */
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s==INVALID_SOCKET) err_fatal(«socket() failed!»);

tport_n=htons(1037);
printf(«nhtons eseguita correttamente(%d)n»,tport_n);

saddr.sin_family=AF_INET;
saddr.sin_port=tport_n;
saddr.sin_addr.s_addr=INADDR_ANY; /* accetto qualsiasi indirizzo
*/

/* accetto la connessione*/
addrlen=sizeof(struct sockaddr_in);
s1=accept(s,(struct sockaddr *) &caddr, &addrlen);

/* Chiude i socket */
WSACleanup();
closesocket(s);
>
/* stampa errore */
void err_fatal(char *mes)
<
printf(«%s, errno=%dn»,mes,WSAGetLastError());
perror(«»);
system(«pause»);
exit(1);
>

Источник

Adblock
detector

Socket: bind error. why??

Bind socket error 0x2740 astroneer

Добрый день! Уважаемые читатели IT портала Pyatilistnik.org. В прошлый раз мы с вами рассмотрели методы позволяющие протестировать загрузочную флешку перед работой, что порой очень обосновано. В сегодняшней публикации я вам покажу методы диагностики и траблшутинга при подключении к серверу 1С, где в ряде случаев я ловил ошибку 0x00002740 only one usage of each socket address. Думаю, что данный алгоритм действий будет полезен как начинающим, так уже и опытным администраторам. Давайте приступать.

Описание ошибки 0x00002740

Обратился ко мне один из разработчиков с вопросом не знаю ли я в чем может быть причина ошибки:

Диагностика и устранение ошибки 0x00002740

Выше я специально выделил две ошибки 10055 и 10048, так как они многое могут рассказать, обратимся к сайту Microsoft:

  • 1️⃣WSAEADDRINUSE 10048 — Адрес уже используется. — Как правило, разрешено использовать только один адрес сокета (протокол, IP-адрес или порт). Эта ошибка возникает, если приложение пытается привязать сокет к IP-адресу или порту, который уже использовался для существующего сокета, или сокета, который был закрыт неправильно, или тот, который все еще находится в процессе закрытия.
  • 2️⃣WSAENOBUFS 10055- Буферное пространство недоступно. Не удалось выполнить операцию сокета, так как в системе недостаточно места в буфере или из-за переполнения очереди.

Понимая, что нет свободных сокетов можно двигаться дальше, мы кстати такое уже ловили, когда у нас просто останавливалась служба 1С, советую почитать. Открываем на сервере командную строку в режиме администратора и вводим команду:

В результате я увидел, что огромное количество динамических портов с 49152 по 65535 были заняты приложением от Касперского.

Если открыть просмотр событий и посмотреть логи, то была огромная куча ошибок ID 15005.

Так же можно увидеть, что многие программы ждут когда освободятся динамические порты, поэтому и соединения с сервером 1С, то были, то пропадали.

Так, что виновник найден. У вас варианты:

  • Перезагрузиться и до настроить Касперского, чтобы он не создавал такое количество соединений
  • Исключить определенные порты, чтобы их не занимали и отдать это программа, как мы делали с 1С, ссылка выше в середине статьи.

Источник

Legacy GM network_create_server error

KerwinSneijders

Guest

I have been busy with multiplayer in gamemaker studio 1.4 for quite some time now.
I use some scripts to make it easier to read. I do not use any extensions! (I can post those if needed)

FYI: Yesterday everything worked. I did not change ANYTHING that had anything to do with the server!

Anyway:
I am creating the server like this:
The debug is in here because I was debugging my problem

I have searched all the code blocks (there are not a lot) and nothing changes the value of global.server, and nothing re-runs the script above.

PS: When I comment out the server creation the error is gone.
PS2: Changing the actual port to 5555 or 9391 or anything does not change anyhing. port 9398 is not in use on my pc either (when checked netstat -ao in CMD)

HELP IS REALLY APPRECIATED. I AM STUCK. (I hate posting on forums. I rather search myself. But after 3 hours. I gave up.)

EDIT:
After some tests it reruns the create_server script, even though it is not called anywhere except in the create event. Any Ideas.

KerwinSneijders

Guest

chamaeleon

Member

KerwinSneijders

Guest

That is the whole thing!? I have searched my whole project using «search in scripts» (this includes ALL GML language in the project (and even drag and drop)). NO CODE is changing the value. The only odd thin I noticed is that the script above is not running once. It runs 3 times. It litterly is not called ANYWHERE except for the create event (Also searched for it) and there is only 1 object once in the room (and in the project).

I did 2 debug messages this time, one before and one after everything happens (in the script) and you can see it runs 3 times. It is not executed anywhere. I HAVE NO CLUE what is going on, I am desperate and kind of afraid I have to redo/kill my project for this.

PS: saving the game to a new folder doesn’t affect anything, starting another server with the used port works fine and redoing the script from the one that does work (

chamaeleon

Member

Member

Can you post your project or only all the network codes so we can test and debug?

Maybe we can help.

If you are having a code executed more than the times it should executed something must be wrong in the way you call it.

A user input, a collision, something that make it repeteable until the end of the first script is executed (which i think is in any network event)

The-any-Key

Member

KerwinSneijders

Guest

Because I didn’t really understand what you meant.

I added the «string(id)» in front of the debug:

chamaeleon

Member

KerwinSneijders

Guest

And.. this happened the first time, the second time it said from the step event. I went checking and found something that I still don’t understand how it is related (a message to all connected clients except the server)

Anyway after commenting that out, the server was able to connect. but always connected twice and with 1 error (instead of the usual 2). I have spend another 2 hours commenting out codes that were unrelated (everything) but I tried. cCouldn’t find anything anymore so I rage quit. (I used the debug mode).

I took an old backup from far back, tested it, that one worked. Copied all the code except for 1 step event block (the one from above, that I thought was useless). Tested it, and it worked. Now, the point is. That same code blcok that I didn’t copy, WAS COMMENTED OUT THE ENTIRE 2 HOURS OF TESTING. So I had THE EXACT SAME PROJECT. (except for a fully commented out step code block) and now it does work. (TRUST ME, I copied, every script, every codeblock but that one step thing. and the old one still gave errors while the new one worked perfectly fine.. I am 99% sure this was Gamemaker, and not me. Because it was the day before I posted this (all good, and then, BAAM broken).

Even though I have deleted the full project, I still want to thank all of you (especially chamaeleon) for helping and suggesting the debug mode.
Thanks again.

Simple Gamers

Guest

Error (0x 2740): Can’t bind port
Setting SO_REUSEADDR and retrying..
Error (0x 271d): Can’t bind port even with SO_REUSEADDR
cannot bind port
-1
-1
Pause event has been registered for this frame
Pause event has been unregistered

I have that Error and How do i Fix it ?

Источник

FAQ по ошибкам Astroneer: не запускается, черный экран, тормоза, вылеты, error, DLL

Иногда при запуске Astroneer появляются ошибки. Неприятно, но установленная вами игра может не запускаться, вылетая, зависая, показывая чёрный экран и выдавая ошибки в окнах. Поэтому возникают вполне логичные вопросы: «Что делать?», «Из-за чего это происходит?» и «Как решить проблему?». Мы постарались собрать всю необходимую информацию с универсальными инструкциями, советами, различными программами и библиотеками, которые призваны помочь решить наиболее распространённые ошибки, связанные с Astroneer и другими играми на ПК.

Необходимое ПО для Astroneer

Мы настоятельно рекомендуем ознакомиться со ссылками на различные полезные программы. Зачем? Огромное количество ошибок и проблем в Astroneer связаны с не установленными/не обновлёнными драйверами и с отсутствием необходимых библиотек.

Низкий FPS, Astroneer тормозит, фризит или лагает

Современные игры крайне ресурсозатратные, поэтому, даже если вы обладаете современным компьютером, всё-таки лучше отключить лишние/ненужные фоновые процессы (чтобы повысить мощность процессора) и воспользоваться нижеописанным методами, которые помогут избавиться от лагов и тормозов.

  • Запустите диспетчер задач и в процессах найдите строку с названием игры (Astroneer). Кликайте ПКМ по ней и в меню выбирайте «Приоритеты» , после чего установите значение «Высокое» . Теперь остаётся лишь перезапустить игру.

Уберите всё лишнее из автозагрузки. Для этого все в том же диспетчере задач нужно перейти во вкладку «Автозагрузка» , где нужно отключить лишние процессы при запуске системы. Незнакомые приложения лучше не трогать, если не знаете, за что они отвечают, иначе рискуете испортить запуск системы.

  • А также рекомендуем в настройках, связанных с энергопотреблением, установить «Максимальную производительность» . То же касается и видеокарты: нужно установить максимальную производительность в настройках графического процессора (это можно сделать в «Управлении параметрами 3D» ), а в фильтрации текстур выбирайте параметр «Качество».
  • Если ваша видеокарта от Nvidia по возрасту не старше серии графических процессоров GTX 10, тогда частоту кадров вполне реально поднять за счёт ускорения работы с видеокартой. Для реализации задуманного опять-таки нужно открыть «Панель управления» Видеокарты, перейти в уже знакомую вкладку «Управление параметрами 3D» и выбрать в списке с программами игру, после чего отыскать «Вертикальный синхроимпульс» и кликнуть по нему, чтобы в меню выставить параметр «Быстро» .

    Следует удалить временные папки, ненужные файлы и кэш. На просторах интернета можно найти кучу самых разных программ, которые помогают это сделать. Мы рекомендуем воспользоваться для этого программой BleachBit или CCleaner .

    Проведите дефрагментацию или оптимизацию жёсткого диска. Для этого перейти в «Свойства жёсткого диска» вкладка «Сервис» «Дефрагментация» или «Оптимизация» . Кроме того, там же можно провести проверку/очистку диска, что в некоторых случаях помогает.

  • В конце концов, перейдите на простое оформление, чтобы компьютер не нагружался ресурсоёмкими эффектами. К примеру, можно смело отключать встроенные отладчики, индексирование поиска и многое другое.
  • Лучшие видеокарты для комфортной игры в 1080p в 2022-2023

    Astroneer вылетает в случайный момент или при запуске

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

    • Первым делом попробуйте наиболее простой вариант – перезапустите Astroneer, но уже с правами администратора.

    Обязательно следует проверить, не возникает ли конфликтов у Astroneer с другими приложениями на компьютере. Например, многие игроки часто ругаются на утилиту под названием MSI AfterBurner , поэтому, если пользуетесь такой или любой другой похожей, отключайте и пробуйте запустить игру повторно.

  • Вполне возможно, что игра отказывается адекватно работать из-за Windows Defender (он же «Защитник» ) или из-за антивируса. Поэтому вам следует зайти в опции и добавить .exe-файл запуска Astroneer в исключения, или сразу отключить антивирус вместе с Защитником (они также могли удалить какой-нибудь жизненно важный файл для игры, который нужно восстановить).
  • Как увеличить объём памяти видеокарты? Запускаем любые игры

    Отсутствует DLL-файл или ошибка DLL

    Для начала следует объяснить, как вообще возникают ошибки, связанные с DLL-файлами: во время запуска Astroneer обращается к определённым DLL-файлам, и если игре не удаётся их отыскать, тогда она моментально вылетает с ошибкой. Причём ошибки могут быть самыми разными, в зависимости от потерянного файла, но любая из них будет иметь приставку «DLL» .

    Для решения проблемы необходимо отыскать и вернуть в папку пропавшую DLL-библиотеку. И проще всего это сделать, используя специально созданную для таких случаев программу DLL-fixer – она отсканирует вашу систему и поможет отыскать недостающую библиотеку. Конечно, так можно решить далеко не любую DLL-ошибку, поэтому ниже мы предлагаем ознакомиться с более конкретными случаями.

    Ошибка d3dx9_43.dll, xinput1_2.dll, x3daudio1_7.dll, xrsound.dll и др.

    Все ошибки, в названии которых можно увидеть «d3dx» , «xinput» , «dxgi» , «d3dcompiler» и «x3daudio» лечатся одним и тем же способом – воспользуйтесь веб-установщиком исполняемых библиотек DirectX .

    Ошибка MSVCR120.dll, VCRUNTIME140.dll, runtime-x32.dll и др.

    Ошибки с названием «MSVCR» или «RUNTIME» лечатся установкой библиотек Microsoft Visual C++ (узнать, какая именно библиотека нужна можно в системных требованиях).

    Избавляемся от ошибки MSVCR140.dll / msvcr120.dll / MSVCR110.dll и других DLL раз и навсегда

    Распространённые сетевые ошибки

    Не вижу друзей / друзья в Astroneer не отображаются

    Неприятное недоразумение, а в некоторых случаях даже баг или ошибка (в таких случаях ни один способ ниже не поможет, поскольку проблема связана с серверами). Любопытно, что с подобным сталкиваются многие игроки, причём неважно, в каком лаунчере приходится играть. Мы не просто так отметили, что это «недоразумение», поскольку, как правило, проблема решается простыми нижеописанными способами:

    • Убедитесь в том, что вы вместе с друзьями собираетесь играть в одном игровом регионе, в лаунчере установлен одинаковый регион загрузки.

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

    Самый радикальный способ решения проблемы – необходимо полностью переустановить лаунчер. При этом в обязательном порядке удалите все файлы, связанные с лаунчером, чтобы ничего не осталось на компьютере.

  • Конкретно для «Стима» существует ещё один максимально простой способ решения проблемы: выбираете любой понравившийся раздел «Библиотека» или «Сообщество» , после чего переходите на открытой вкладке в «Steam» «Просмотр» «Друзья» «Игры» «Справка» . И далее в разделе с друзьями, в выпадающем меню поставьте галочку напротив пункта «В сети» (или переставьте статус, но вернитесь к тому, где вы в сети).
  • Создателю сервера нужно открыть порты в брандмауэре

    Многие проблемы в сетевых играх связаны как раз с тем, что порты закрыты. Нет ни одной живой души, друг не видит игру (или наоборот) и возникают проблемы с соединением? Самое время открыть порты в брандмауэре, но перед этим следует понимать как «это» работает. Дело в том, что программы и компьютерные игры, использующие интернет, для работы требуют не только беспроблемный доступ к сети, но и вдобавок открытые порты. Это особенно важно, если вы хотите поиграть в какую-нибудь сетевую игру.

    Часто порты на компьютере закрыты, поэтому их следует открыть. Кроме того, перед настройкой нужно узнать номера портов, а для этого для начала потребуется узнать IP-адрес роутера.

    Источник

    KerwinSneijders

    Guest


    • #1

    Hello,

    I have been busy with multiplayer in gamemaker studio 1.4 for quite some time now.
    I use some scripts to make it easier to read. I do not use any extensions! (I can post those if needed)

    FYI: Yesterday everything worked. I did not change ANYTHING that had anything to do with the server!

    Anyway:
    I am creating the server like this:
    The debug is in here because I was debugging my problem

    Code:

    global.c_max = 32;
    
    global.server = network_create_server(network_socket_tcp, 55555, global.c_max);
    
    show_debug_message("Server ID: " + string(global.server));
    
    for(var i = 1; i <= global.c_max; i++) {
        global.c_online[i] = false;
        global.c_name_temp[i] = "";
        global.c_name[i] = "";
    }

    When I run the game I get this:

    Code:

    Attempting to set gamepadcount to 12
    Server ID: 0
    Socket Connected.
    Total memory used = 467183(0x000720ef) bytes

    The server ID is 0, which is all good. But out of nowhere I get this error:

    Code:

    Error (0x    2740): Can't bind port
    Setting SO_REUSEADDR and retrying...Error (0x    271d): Can't bind port even with SO_REUSEADDR
    cannot bind port -1

    After putting this is STEP:

    Code:

     show_debug_message("server ID: " + string(global.server));

    I get this in the compile form:
    Important lines have the ### prefix (manually added)

    Code:

    Attempting to set gamepadcount to 12
    ###Server ID: 0
    ###Socket Connected.
    Total memory used = 467183(0x000720ef) bytes
    Error (0x    2740): Can't bind port
    Setting SO_REUSEADDR and retrying...Error (0x    271d): Can't bind port even with SO_REUSEADDR
    ###cannot bind port -1
    ###server ID: -1
    Error (0x    2740): Can't bind port
    Setting SO_REUSEADDR and retrying...Error (0x    271d): Can't bind port even with SO_REUSEADDR
    cannot bind port -1
    ###server ID: -1
    ###server ID: -1
    ###server ID: -1

    I have searched all the code blocks (there are not a lot) and nothing changes the value of global.server, and nothing re-runs the script above.

    PS: When I comment out the server creation the error is gone.
    PS2: Changing the actual port to 5555 or 9391 or anything does not change anyhing. port 9398 is not in use on my pc either (when checked netstat -ao in CMD)

    HELP IS REALLY APPRECIATED. I AM STUCK. (I hate posting on forums… I rather search myself… But after 3 hours… I gave up.)

    EDIT:
    After some tests it reruns the create_server script, even though it is not called anywhere except in the create event. Any Ideas???

    Last edited by a moderator: Sep 5, 2017

    KerwinSneijders

    Guest


    • #2

    Anyone??? PLEASE!!!!!!! It makes no sense whatsoever…. Anyone?

    Last edited by a moderator: Sep 6, 2017

    • #3

    I think it would be rather important to find out where/why your global.server variable gets set to -1. If the creation of the server results in 0, and you later see it as -1, logically you have a code path somewhere that assigns it -1. What does that code look like? I assume it’s not your small script snippet, as there’s no corresponding «Server ID» (in contrast to «server ID») being output. I feel there must be a lot of missing information before anything but guesses are possible.

    KerwinSneijders

    Guest


    • #4

    I think it would be rather important to find out where/why your global.server variable gets set to -1. If the creation of the server results in 0, and you later see it as -1, logically you have a code path somewhere that assigns it -1. What does that code look like? I assume it’s not your small script snippet, as there’s no corresponding «Server ID» (in contrast to «server ID») being output. I feel there must be a lot of missing information before anything but guesses are possible.

    That is the whole thing!? I have searched my whole project using «search in scripts» (this includes ALL GML language in the project (and even drag and drop)). NO CODE is changing the value. The only odd thin I noticed is that the script above is not running once… It runs 3 times. It litterly is not called ANYWHERE except for the create event (Also searched for it) and there is only 1 object once in the room (and in the project).

    Code:

    Attempting to set gamepadcount to 12
    server ID: 0
    server ID: 0
    Socket Connected.
    Total memory used = 467865(0x00072399) bytes
    Error (0x    2740): Can't bind port
    Setting SO_REUSEADDR and retrying...Error (0x    271d): Can't bind port even with SO_REUSEADDR
    cannot bind port
    server ID: -1
    server ID: -1
    Error (0x    2740): Can't bind port
    Setting SO_REUSEADDR and retrying...Error (0x    271d): Can't bind port even with SO_REUSEADDR
    cannot bind port
    server ID: -1
    server ID: -1

    I did 2 debug messages this time, one before and one after everything happens (in the script) and you can see it runs 3 times…. It is not executed anywhere… I HAVE NO CLUE what is going on, I am desperate and kind of afraid I have to redo/kill my project for this.

    PS: saving the game to a new folder doesn’t affect anything, starting another server with the used port works fine and redoing the script from the one that does work (<< bold) doesn’t do anything either.

    Edit: Thanks for looking through this though, I really, really appreciate it!

    • #5

    That is the whole thing!? I have searched my whole project using «search in scripts» (this includes ALL GML language in the project (and even drag and drop)). NO CODE is changing the value. The only odd thin I noticed is that the script above is not running once… It runs 3 times. It litterly is not called ANYWHERE except for the create event (Also searched for it) and there is only 1 object once in the room (and in the project).

    Perhaps you can include show_debug_message(«Instance id = » + string(id)) in the code to have it print out what instance is running the code (if what you say is true it would be the same every time, but just in case.. Maybe you have some duplicates in the same position in the room so it only looks like one in the room editor or something). Also probably wouldn’t hurt to set a breakpoint on the line creating the server and see what the local and instance variables may be like when you hit it (up to the three times you mention). In any case, the additional calls would clearly fail (since only one listening socket can use a given port). I am fairly sure you should be able to fix this problem if you are able to narrow down the unexpected/unintended use of the function.

    • #6

    Can you post your project or only all the network codes so we can test and debug?

    Maybe we can help.

    If you are having a code executed more than the times it should executed something must be wrong in the way you call it.

    A user input, a collision, something that make it repeteable until the end of the first script is executed (which i think is in any network event)

    • #7

    global.server = network_create_server(…)

    Can you add something like show_debug_message(«create server») in the create event
    And post the output. As you said the create event run multiple times. I think you may have multiple objects in the room editor.

    KerwinSneijders

    Guest


    • #8

    Okay, I have done all the suggested, except for:

    Also probably wouldn’t hurt to set a breakpoint on the line creating the server and see what the local and instance variables may be like when you hit it (up to the three times you mention).

    Because I didn’t really understand what you meant.

    I added the «string(id)» in front of the debug:

    Perhaps you can include show_debug_message(«Instance id = » + string(id))

    I put debug in the create event.

    Can you add something like show_debug_message(«create server») in the create event

    This is the output: (I hope you are as mind ****ed as I am… )

    Code:

    Attempting to set gamepadcount to 12
    100000: Running create event
    100000: Server ID: 0
    Socket Connected.
    Total memory used = 467965(0x000723fd) bytes
    Error (0x    2740): Can't bind port
    Setting SO_REUSEADDR and retrying...Error (0x    271d): Can't bind port even with SO_REUSEADDR
    cannot bind port 
    100000: Server ID: -1
    Error (0x    2740): Can't bind port
    Setting SO_REUSEADDR and retrying...Error (0x    271d): Can't bind port even with SO_REUSEADDR
    cannot bind port 
    100000: Server ID: -1
    
    100000: Server ID: -1 (spam)
    100000: Server ID: -1 (spam) 
    100000: Server ID: -1 (spam)
    100000: Server ID: -1 (spam)
    100000: Server ID: -1 (spam)
    Attempting to set gamepadcount to 0

    • #9

    Repeated output either point to a loop in your code or events like step, async or collision events, etc. Enable a breakpoint on the network_create_server() line, and run in debug mode and make note of the call stack content in the debugger and hit the continue button every time it pauses the game when/if the breakpoint is hit. The idea is to identify what event event is running when you get the repeated Server ID output.

    Last edited: Sep 6, 2017

    KerwinSneijders

    Guest


    • #10

    Repeated output either point to a loop in your code or events like step, async or collision events, etc. Enable a breakpoint on the network_create_server() line, and run in debug mode and make note of the call stack content in the debugger and hit the continue button every time it pauses the game when/if the breakpoint is hit. The idea is to identify what event event is running when you get the repeated Server ID output.

    Okay, I never used the debugger before, so it took me some time to figure this one out… Here are the results:

    And.. this happened the first time, the second time it said from the step event. I went checking and found something that I still don’t understand how it is related (a message to all connected clients except the server)

    Anyway after commenting that out, the server was able to connect… but always connected twice and with 1 error (instead of the usual 2). I have spend another 2 hours commenting out codes that were unrelated (everything) but I tried… cCouldn’t find anything anymore so I rage quit. (I used the debug mode).

    I took an old backup from far back, tested it, that one worked. Copied all the code except for 1 step event block (the one from above, that I thought was useless). Tested it, and it worked… Now, the point is…. That same code blcok that I didn’t copy, WAS COMMENTED OUT THE ENTIRE 2 HOURS OF TESTING!??!?! So I had THE EXACT SAME PROJECT. (except for a fully commented out step code block) and now it does work… (TRUST ME, I copied, every script, every codeblock but that one step thing… and the old one still gave errors while the new one worked perfectly fine.. I am 99% sure this was Gamemaker, and not me… Because it was the day before I posted this (all good, and then, BAAM broken)….

    Even though I have deleted the full project, I still want to thank all of you (especially chamaeleon) for helping and suggesting the debug mode….
    Thanks again!!! <3 <3 <3

    Simple Gamers

    Guest


    • #11

    Error (0x 2740): Can’t bind port
    Setting SO_REUSEADDR and retrying..
    Error (0x 271d): Can’t bind port even with SO_REUSEADDR
    cannot bind port
    -1
    -1
    Pause event has been registered for this frame
    Pause event has been unregistered

    I have that Error and How do i Fix it ?

    • #12

    Error (0x 2740): Can’t bind port
    Setting SO_REUSEADDR and retrying..
    Error (0x 271d): Can’t bind port even with SO_REUSEADDR
    cannot bind port

    This shows that the port you are trying to start a server on, is already used by the computer. This often happen if you run network_create_server with the same port two or more times. Fix it by destroying the socket so the port get free. Ex

    Code:

    var server=network_create_server(...);
    ...
    network_destroy(server);

    Or simply dont call it twice.

    0 / 0 / 0

    Регистрация: 24.01.2013

    Сообщений: 12

    1

    25.02.2017, 16:30. Показов 7465. Ответов 8


    Подскажите, при запуске программы выскакивает окно — windows socket error: обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт) (10048), on API ‘buld’

    При запуске программы - windows socket error

    и еще одно — Acces violation at address 00502CCF in module ‘HASyn.exe’. Write of address 0FA5C000.

    При запуске программы - windows socket error

    Название: 03.png
Просмотров: 76

Размер: 16.0 Кб
    подскажите, можно ли это исправить, если да то как.

    __________________
    Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



    0



    4232 / 1738 / 245

    Регистрация: 01.05.2013

    Сообщений: 7,646

    25.02.2017, 18:18

    2

    anton877, Windows sockets error codes, values, and meanings.

    WSAEADDRINUSE (10048)

    Перевод: адрес уже используется.
    Описание: обычно разрешается только одно использование адреса сокета (протокол/IP-адрес/порт). Эта ошибка возникает, если программа пытается выполнить привязку сокета к IP-адрес или порт, который уже был использован для существующего сокета socket, который был закрыт неправильно, (Wsapiref_6vzm.asp), или сокет в процессе закрытия. Программы сервера привязать несколько разъемов на тот же номер порта рассмотрите возможность использования setsockopt (Wsapiref_94aa.asp)(SO_REUSEADDR). Клиентские программы обычно не требуется вызывать все привязки, подключения (Wsapiref_8m7m.asp) автоматически выбирает неиспользуемый порт. При вызове bind с адресом подстановочный знак (включающих ADDR_ANY) WSAEADDRINUSE ошибка может быть отложена до определенного адреса фиксируется. Это может произойти при вызове другой функции, которая происходит более поздних, включая подключение, прослушивания, WSAConnect или WSAJoinLeaf.

    Посмотрите. Будет ли наблюдаться эта ошибка при запуске программы в Безопасном режиме с загрузкой сетевых драйверов ?



    0



    0 / 0 / 0

    Регистрация: 24.01.2013

    Сообщений: 12

    25.02.2017, 18:30

     [ТС]

    3

    в безопасном режиме тоже самое.



    0



    4232 / 1738 / 245

    Регистрация: 01.05.2013

    Сообщений: 7,646

    25.02.2017, 18:48

    4

    anton877, Хм… то что в безопасном выскакивает эта ошибка — странно.
    Суть этой ошибки в том,что несколько программ используют один и тот же порт/протокол.
    Тут 2 варианта:
    1. (простой) Провести диагностику служб и автозагрузки.
    Если после отключения сторонних служб/элементом автозагрузки,при запуске программы ошибка больше не выскакивает,то проблема заключается в одной из отключённых сторонних служб или элементе автозагрузки.

    Далее действуйте методом «половинного деления». Включите половину служб и снова перезагрузитесь. Если проблема не появляется, причина в оставшихся отключенных службах. Если проблема воспроизводится, причина во включенных службах — отключите половину из них и снова перезагрузитесь.

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

    2. Запустить командную строку от имени администратора и ввести команду

    Посмотрите нет ли в списке процессов (PID),которые используют один и тот же IP-адрес. Далее запустите диспетчер задач — > вкладка Процессы -> Вид -> Выбрать столбцы -> отметьте ИД процесса и нажмите ОК -> далее с помощью номера PID вы найдёте процессы,кторые используют одни и те же IP-адреса.



    0



    0 / 0 / 0

    Регистрация: 24.01.2013

    Сообщений: 12

    25.02.2017, 20:20

     [ТС]

    5

    сейчас попробую.
    Turok123, а смотреть нужно локальный адрес или внешний адрес?

    Добавлено через 7 минут
    запустил, вот скрин

    При запуске программы - windows socket error

    процесс еще идет

    Добавлено через 14 минут
    запустил диспечер задач —

    При запуске программы - windows socket error

    одинаковых не заметил, может не там смотрю?



    0



    4232 / 1738 / 245

    Регистрация: 01.05.2013

    Сообщений: 7,646

    25.02.2017, 22:54

    6

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

    Код

    netstat -aon >C:result.log

    .
    Далее смотрите содержимое фала C:result.log.



    0



    0 / 0 / 0

    Регистрация: 24.01.2013

    Сообщений: 12

    26.02.2017, 02:26

     [ТС]

    7

    при вводе C:result.log. все резко обрывается и я ничего не вижу, окна с процессом работы не вижу.
    C:result.log. не находит — вот скрин

    При запуске программы - windows socket error

    в ИД процесса, я не заметил одинаковых совпадений, или нужно не одинаковые искать?

    При запуске программы - windows socket error

    При запуске программы - windows socket error



    0



    4232 / 1738 / 245

    Регистрация: 01.05.2013

    Сообщений: 7,646

    26.02.2017, 02:28

    8

    anton877, так и должно быть. Весь результат выполнения команды записывается в файл result.log.



    0



    0 / 0 / 0

    Регистрация: 24.01.2013

    Сообщений: 12

    26.02.2017, 15:25

     [ТС]

    9

    я у себя не нахожу этого файла result.log



    0



    Понравилась статья? Поделить с друзьями:
  • Benvenuto classic bosch ошибки
  • Below is a rendering of the page up to the first error как исправить
  • Below is a rendering of the page up to the first error xml
  • Below is a rendering of the page up to the first error wordpress
  • Bind failed with error 10049