Некоторые пользователи Windows сталкиваются с кодом ошибки 10053 при попытке подключить свой компьютер с помощью почты SMTP или при попытке выполнить команду Winsock. Эта проблема обычно связана с ограничениями маршрутизатора, чрезмерно защищающими брандмауэрами или прокси-серверами и VPN.
Ошибка асинхронного сокета 10053
После изучения этой конкретной проблемы выяснилось, что существует несколько различных причин, которые могут вызывать этот код ошибки. Вот краткий список потенциальных виновников:
- Прерывание соединения из-за вашей машины. Как оказалось, эта проблема может возникнуть из-за того, что в очереди сокета нет места, поэтому сокет не может получить дальнейшее соединение. Этот тип проблемы часто связан с активным прокси-сервером или сетью VPN, которые в конечном итоге занимают всю драгоценную очередь сокетов. В этом случае отключение или удаление прокси-сервера или VPN-клиента должно позволить вам решить проблему.
- Недавно прерванное соединение — при определенных обстоятельствах эта проблема также может возникнуть, если система локальной сети прерывает соединение после сбоя передачи данных. В этом случае получатель никогда не подтверждает данные, отправленные через сокет данных. Обычно это вызвано чрезмерной защитой антивируса или брандмауэра.
- Сценарий TCP / IP — проблемное соединение также может быть причиной этого кода ошибки, если оно истекает после того, как локальная система не получает подтверждения для отправленных данных. Если этот сценарий применим, сброс данных TCP / IP должен решить проблему и устранить код ошибки. Если это не сработает, вам следует перезагрузить или перезагрузить маршрутизатор или модем.
Метод 1. Отключение или удаление избыточных антивирусных программ (если применимо)
Если вы используете сторонний пакет, вы сталкиваетесь с кодом ошибки 10053 при попытке выполнить определенное действие, связанное с вашим почтовым клиентом (например, загрузка или отправка электронной почты через VPOP3), скорее всего, эта проблема вызвана вашим программа-антивирус.
По словам некоторых затронутых пользователей, эта проблема часто вызвана определенными версиями McAfee VirusScan и Norton Antivirus — это всего лишь две сторонние антивирусные программы, которые мы обнаружили, но может быть и другое программное обеспечение, вызывающее такую же проблему.
Если этот сценарий выглядит так, как будто он может быть применим, вы должны начать с отключения защиты в реальном времени и посмотреть, перестает ли возникать код ошибки — в большинстве пакетов AV вы можете отключить защиту в режиме реального времени, щелкнув правой кнопкой мыши панель в трее. значок и ищет параметр, который отключит экраны в реальном времени.
Щелкните правой кнопкой мыши значок Avast на панели задач, чтобы временно отключить Avast
Если отключение защиты в реальном времени не привело к устранению проблемы, следуйте приведенным ниже инструкциям, чтобы удалить проблемный пакет со своего компьютера и удалить все остаточные файлы, чтобы устранить проблему:
- Откройте диалоговое окно «Выполнить», нажав клавиши Windows + R. Затем введите «appwiz.cpl» в текстовое поле и нажмите Enter, чтобы открыть меню «Программы и файлы».
Введите appwiz.cpl и нажмите Enter, чтобы открыть страницу установленных программ.
- Зайдя в меню «Программы и компоненты», прокрутите список установленных программ и найдите проблемный антивирус или брандмауэр, вызывающий конфликт.
- Когда вы его увидите, щелкните его правой кнопкой мыши и выберите «Удалить» из появившегося контекстного меню, чтобы начать процесс удаления.
Удаление антивируса
- После завершения операции перезагрузите компьютер и дождитесь завершения следующего запуска.
- После того, как компьютер загрузится, следуйте инструкциям, относящимся к вашему антивирусу, чтобы удалить все остаточные файлы, оставшиеся после установки стороннего антивируса.
- Как только вам удастся полностью удалить сторонний пакет безопасности из вашего AV, перейдите к следующему потенциальному исправлению ниже.
Если та же проблема все еще возникает после удаления вашего стороннего пакета или этот метод не применим, перейдите к следующему потенциальному исправлению ниже.
Метод 2: Выполнение полного сброса TCP / IP
Если код ошибки 10053 возникает сразу после разрыва соединения TCP / IP в Windows, скорее всего, это проблема с тайм-аутом передачи данных или ошибкой протокола. Как выясняется, это, скорее всего, вызвано сбоями в работе сетевого адаптера или классическим случаем неправильного диапазона DNS.
По словам некоторых затронутых пользователей, эту проблему иногда можно решить, выполнив полный сброс TCP / IP на каждом компьютере, входящем в состав локальной мастерской.
Если вы не знаете, как это сделать, следуйте приведенным ниже инструкциям, чтобы выполнить полный сброс TCP / IP из командной строки с повышенными привилегиями:
- Откройте диалоговое окно «Выполнить», нажав клавиши Windows + R. Затем введите cmd внутри текстового поля и нажмите Ctrl + Shift + Enter, чтобы открыть командную строку с повышенными правами. По запросу UAC (Контроль учетных записей пользователей) нажмите Да, чтобы предоставить доступ администратора.
Запуск командной строки
- Как только вы войдете в командную строку с повышенными привилегиями, введите следующие команды по порядку и нажмите Enter после каждой, чтобы выполнить полный сброс TCP / IP: ipconfig / flushdns nbtstat -R nbtstat -RR netsh int reset all netsh int ip reset netsh winsock сброс настроек
- После успешной обработки каждой команды закройте командную строку с повышенными привилегиями и перезагрузите компьютер.
- После завершения следующего запуска повторите действие, которое ранее вызывало код ошибки 10053, и посмотрите, устранена ли проблема.
Метод 3: перезагрузка или сброс маршрутизатора / модема
Если приведенные выше команды Winsock не устранили проблему в вашем случае, вам следует продолжить, исключив текущую сеть из списка потенциальных виновников.
По мнению некоторых затронутых пользователей, эта проблема также может возникать в тех случаях, когда ваш интернет-провайдер назначает динамический IP-адрес, который конфликтует с определенными параметрами SMTP.
В случае, если этот сценарий применим, есть два способа решить проблему и избежать получения кода ошибки 10053:
- Перезагрузка сетевого устройства — эта операция завершит обновление TCP- и IP-соединения и заставит ваш маршрутизатор / модем назначить новую информацию, связанную с вашим подключением.
- Сброс сетевого устройства — это очистит все пользовательские настройки, которые в настоящее время применяются вашим маршрутизатором или модемом, и вернет ваше сетевое устройство к заводским настройкам.
Если вы планируете или применяете этот метод, мы советуем начать с простого перезапуска и переходить ко второй процедуре только в том случае, если первое вспомогательное руководство (A) не решает проблему:
A. Перезагрузка роутера / модема
Если вы хотите решить проблему без сброса каких-либо конфиденциальных данных, которые в настоящее время хранятся на вашем маршрутизаторе или модеме, это способ сделать это.
Чтобы выполнить перезагрузку (перезагрузку) маршрутизатора, обратите внимание на заднюю часть сетевого устройства и нажмите кнопку включения / выключения, чтобы выключить устройство. После этого также отсоедините кабель питания от розетки, к которой он в данный момент подключен, и подождите целую минуту, чтобы убедиться, что силовые конденсаторы полностью разряжены.
Перезагрузка роутера
После того, как вам удастся перезапустить маршрутизатор, обязательно отключите кабель питания и подождите целую минуту, чтобы убедиться, что силовые конденсаторы полностью разряжены, прежде чем возобновлять питание.
По истечении этого периода повторно подключите кабель питания и дождитесь восстановления доступа к Интернету, прежде чем повторять действие, которое ранее вызывало код ошибки.
Если та же проблема все еще возникает, перейдите к следующему потенциальному исправлению ниже.
Б. Сброс маршрутизатора / модема
Если в вашем случае первый метод не сработал, скорее всего, вы имеете дело с более серьезным несоответствием, которое коренится в меню настроек вашего маршрутизатора или модема.
В этом случае вам следует сбросить маршрутизатор или модем до заводского состояния, восстановить доступ в Интернет и посмотреть, закончится ли эта операция исправлением ошибки 10053.
Важно: прежде чем принудительно выполнить эту операцию, имейте в виду, что в конечном итоге будут удалены все настройки, которые вы ранее установили для своего маршрутизатора. Это будет включать любые сохраненные учетные данные PPPoE, внесенные в белый список или заблокированные сообщения и перенаправленные данные TCP / IP.
Чтобы инициировать сброс маршрутизатора или модема, найдите кнопку сброса (обычно она находится на задней панели маршрутизатора). Когда вам удастся найти его, нажмите кнопку сброса и удерживайте ее нажатой в течение 10 секунд или пока не заметите, что все светодиоды устройства мигают одновременно.
Сброс маршрутизатора
Примечание. Для большинства моделей маршрутизаторов вам понадобится острый предмет, чтобы можно было нажать и удерживать кнопку сброса.
После завершения процедуры сброса дождитесь восстановления доступа к Интернету, затем посмотрите, исправлен ли теперь код ошибки 10053. Имейте в виду, что если ваш интернет-провайдер использует PPPoE, вам нужно будет повторно вставить правильные учетные данные, прежде чем доступ в Интернет будет восстановлен.
Если этот сценарий неприменим или вы уже пробовали это безуспешно, перейдите к следующему потенциальному исправлению ниже.
Метод 4: отключите прокси или VPN-соединение (если применимо)
Если ни один из вышеперечисленных методов не устранил проблему в вашем случае, и вы используете VPN-клиент или прокси-сервер, чтобы скрыть происхождение вашего подключения, это, скорее всего, является источником ошибки 10053.
Нам удалось найти множество пользовательских отчетов, в которых утверждалось, что эта конкретная ошибка была вызвана либо клиентом VPN, либо прокси-сервером, который был принудительно применен на системном уровне.
В зависимости от используемого вами решения по обеспечению анонимности вы сможете решить проблему, отключив прокси-сервер или полностью удалив VPN на системном уровне.
Мы рассмотрели оба возможных сценария, поэтому не стесняйтесь следовать одному из нижеприведенных руководств, чтобы отключить прокси-сервер системного уровня или удалить VPN-клиент:
A. Удаление VPN на уровне системы
- Нажмите клавишу Windows + R, чтобы открыть диалоговое окно «Выполнить». Как только вы окажетесь внутри, введите appwiz.cpl в текстовое поле и нажмите Enter, чтобы открыть меню «Программы и компоненты». Когда вам будет предложено UAC (Контроль учетных записей пользователей), нажмите Да, чтобы предоставить доступ администратора.
Введите appwiz.cpl и нажмите Enter, чтобы открыть страницу установленных программ.
- Как только вы окажетесь на экране «Программы и компоненты», найдите VPN-клиент в списке установленных приложений. Когда вы найдете его, щелкните его правой кнопкой мыши и выберите «Удалить» из появившегося контекстного меню.
Удаление инструмента VPN
- Находясь внутри экрана установки, следуйте инструкциям на экране, чтобы завершить процесс установки, затем перезагрузите компьютер после завершения операции и посмотрите, будет ли проблема устранена после завершения следующего запуска.
Б. Отключение прокси-сервера
- Откройте диалоговое окно «Выполнить», нажав клавиши Windows + R. Внутри текстового поля введите inetcpl.cpl и нажмите Enter, чтобы открыть вкладку «Свойства Интернета». Когда вам будет предложено UAC (Контроль учетных записей пользователей), нажмите Да, чтобы предоставить доступ администратора.
Диалог запуска: inetcpl.cpl
- Как только вы окажетесь на экране свойств Интернета, перейдите на вкладку «Подключение» в горизонтальном меню в верхней части экрана, затем нажмите «Настройки локальной сети» (прямо под настройками локальной сети).
Откройте настройки LAN в Internet Options
- Как только вы войдете в настройки локальной сети (LAN), войдите в категорию прокси-серверов и снимите флажок, связанный с Use a proxy server for your LAN.
Отключение прокси-сервера
- После успешного отключения прокси-сервера перезагрузите компьютер и посмотрите, будет ли проблема устранена после завершения следующего запуска.
Some Windows users are encountering the 10053 error code while trying to connect their computer with an SMTP mail or when trying to perform a Winsock command. This problem is typically linked to router restrictions, overprotective firewalls or Proxies, and VPNs.
After investigating this particular issue, it turns out that there are several different causes that might be causing this error code. Here’s a shortlist of potential culprits:
- Connection abort caused by your machine – As it turns out, this problem might occur because there is no space in the socket’s queue, so the socket cannot receive further connection. This type of issue is often related to an active Proxy or VPN network that end up taking up all the precious socket queue. In this case, disabling or uninstalling the Proxy server or VPN client should allow you to fix the issue.
- Recently aborted connection – Under certain circumstances, this problem can also occur if the local network system aborts a connection after data transmission fails. In this case, the receiver never acknowledges data sent on a data socket. This is typically caused by an overprotective antivirus or firewall.
- TCP / IP scenario – A troublesome connection can also be responsible for this error code if it timeouts after the local system doesn’t receive an acknowledgment for data sent. If this scenario is applicable, resetting your TCP / IP data should fix the problem and eliminate the error code. If this doesn’t work, you should reboot or reset your router or modem instead.
Method 1: Disabling or Uninstalling Overprotective AV suites (if applicable)
If you’re using a 3rd party suite you’re encountering the 10053 error code when trying to perform a certain action having to do with your email client (like downloading or sending email via VPOP3), chances are this issue is being caused by your antivirus software.
According to some affected users, this problem is often caused by certain versions of McAfee VirusScan and Norton Antivirus – These are just two 3rd party AV that we discovered, but there might be other software causing the same kind of problem.
If this scenario looks like it could be applicable, you should start by disabling the real-time protection and seeing if the error code stops occurring – with most AV suites, you can disable the real-time protection by right-clicking the tray-bar icon and looking for an option that will disable the real-time shields.
If disabling the real-time protection didn’t end up fixing the issue, follow the instructions below to uninstall the problematic suite from your computer and clear any remnant file to fix the problem:
- Open up a Run dialog box by pressing Windows key + R. Next, type ‘appwiz.cpl’ inside the text box and press Enter to open up the Programs and Files menu.
Type appwiz.cpl and Press Enter To Open Installed Programs Page - Once you’re inside the Programs and Features menu, scroll down through the list of installed programs and locate the problematic Antivirus or Firewall solution that’s causing the conflict.
- When you see it, right-click on it and choose Uninstall from the newly appeared context menu to begin the uninstallation process.
Uninstalling your antivirus - Once the operation is complete, reboot your computer and wait for the next startup to complete.
- After your computer boots back up, follow the instructions specific to your Antivirus to remove any remnant files left behind by your 3rd party Antivirus installation.
- Once you manage to completely remove your 3rd party security suite from your AV, move down to the next potential fix below.
If the same problem still occurs after uninstalling your 3rd party suite or this method is not applicable, move down to the next potential fix below.
Method 2: Performing a Complete TCP / IP reset
If the 10053 error code occurs right after the TCP / IP connection is aborted by Windows, this is most likely a problem with the data transmission timeout or protocol error. As it turns out, this is most likely caused by a glitch with the network adapter or a classic case of bad DNS range.
According to some affected users, this problem can sometimes be fixed by performing a complete TCP / IP reset on every computer that’s part of the local workshop.
If you’re not sure how to do this, follow the instructions below to perform a complete TCP / IP reset from an elevated Command Prompt:
- Open up a Run dialog box by pressing Windows key + R. Next, type ‘cmd’ inside the text box and press Ctrl + Shift + Enter to open up an elevated Command Prompt. When prompted by the UAC (User Account Control), click Yes to grant admin access.
Running the Command Prompt - Once you’re inside the elevated Command Prompt, type the following commands in order and press Enter after each one to do a complete TCP / IP reset:
ipconfig /flushdns nbtstat -R nbtstat -RR netsh int reset all netsh int ip reset netsh winsock reset
- After every command is processed successfully, close the elevated Command Prompt and reboot your computer.
- Once the next startup is complete, repeat the action that was previously causing the 10053 error code and see if the problem is now fixed.
Method 3: Rebooting or Resetting your router/modem
If the Winsock commands above didn’t fix the problem in your case, you should proceed by excluding your current network from the list of potential culprits.
According to some affected users, this problem is also expected to occur in instances where your ISP (Internet Service Provider) assigns a dynamic IP that conflicts with certain SMTP options.
In case this scenario is applicable, there are 2 ways to fix the problem and avoid getting the 10053 error code:
- Restarting the network device – This operation will end up refreshing the TCP and IP connection and force your router/modem to assign new information related to your connection.
- Resetting the network device – This will clear any custom settings your router or modem is currently enforcing and return your network device to its factory settings.
If you’re planning or enforcing this method, our advice to start with a simple restart and move out to the second procedure only if the first sub-guide (A) doesn’t fix the problem:
A. Restarting your router/modem
If you want to fix the problem without resetting any sensitive data that’s currently stored by your router or modem, this is the way to do it.
In order to perform a router reboot (restart), turn your attention to the rear part of your network device and press the On / Off button to power off the device. After you do this, also disconnect the power cable from the power outlet it’s currently connected to and wait for a full minute in order to ensure that the power capacitors are completely drained.
After you manage to restart your router, make sure to disconnect the power cable and wait for a full minute to ensure that the power capacitors are completely drained before restoring power.
Once the period is passed, re-connect the power cable and wait until the Internet access is re-established before repeating the action that was causing the error code before.
If the same problem is still occurring, move down to the next potential fix below.
B. Resetting your router/modem
If the first method didn’t work in your case, chances are you’re dealing with a more serious inconsistency that is rooted inside the settings menu of your router or modem.
In this case, you should reset your router or modem to its factory state, restore internet access, and see if this operation ends up fixing the 10053 error.
Important: Before you enforce this operation, keep in mind that it will end up clearing any settings that you have previously established for your router. This will include any saved PPPoE credentials, whitelisted or blocked posts, and forwarded TCP / IP data.
To initiate a router or modem reset, look for the reset button (typically located on the back of your router). When you manage to locate it, press the Reset button and keep it presses for 10 seconds or until you notice all the device LEDs flashing at the same time.
Note: With most router models, you will need a sharp object in order to be able to press and hold on the Reset button.
After the reset procedure is complete, wait until the Internet access is re-established, then see if the 10053 error code is now fixed. Keep in mind that if your ISP is using PPPoE, you will need to re-insert the correct credentials before Internet access is restored.
If this scenario was not applicable or you already tried this with no success, move down to the next potential fix below.
Method 4: Disable Proxy or VPN connection (if applicable)
If none of the methods above have fixed the issue in your case and you’re using a VPN client or a Proxy server to hide the origin of your connection, this is most likely the source of the 10053 error.
We managed to find a lot of user reports claiming this particular error was caused either by a VPN client or a proxy server that was enforced at a system level.
Depending on the anonymity solution that you’re using, you should be able to fix the problem either by disabling the proxy server or by uninstalling the system level VPN altogether.
We’ve covered both potential scenarios, so feel free to follow one of the sub-guides below to either disable the system-level proxy server or uninstall the VPN client:
A. Uninstalling System-level VPN
- Press Windows key + R to open up a Run dialog box. Once you’re inside, type ‘appwiz.cpl’ inside the text box and press Enter to open up the Programs and Features menu. When you are prompted by the UAC (User Account Control), click Yes to grant admin access.
Type appwiz.cpl and Press Enter To Open Installed Programs Page - Once you’re inside the Programs and Features screen, find the VPN client among the list of installed applications. When you find it, right-click on it and choose Uninstall from the newly appeared context menu.
Uninstalling a VPN tool - From the insides of the installation screen, follow the on-screen prompts to complete the installation process, then reboot your computer once the operation is complete and see if the issue is fixed once the next startup is complete.
B. Disabling the Proxy Server
- Open up a Run dialog box by pressing Windows key + R. Inside the text box, type ‘inetcpl.cpl’ and press Enter to pen up the Internet Properties tab. When you’re prompted by the UAC (User Account Control), click Yes to grant admin access.
Run dialog: inetcpl.cpl - Once you’re inside the Internet Properties screen, go over the Connection tab from the horizontal menu on the top of the screen, then click on LAN Settings (right under Local Area Network LAN settings).
Open LAN settings in Internet Options - Once you’re inside the Local Area Network (LAN) settings, access the Proxy server category and uncheck the box associated with Use a proxy server for your LAN.
Disabling the Proxy server - After you have successfully disabled the Proxy server, reboot your computer and see if the problem is fixed once the next startup is complete.
|
|
|
|
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Ошибка сокета 10053
, Возникает при отключении клиента.
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
|
|
Пишу приложение на TServerSocket и TClientSocket Когда выполняю следующий код в программе клиенте, то ошибок нигде не возникает: if( TcpAgentClient->Connect()) { TcpAgentClient->Disconnect(); ShowMessage(«Ok»); } else { ShowMessage(«Connected FAILURE!!!»); };
Тоесть и клиент и сервер правильно реагируют. if (Command==»SERVER_Stop_job») { if (m_tcpClient->Active) { m_tcpClient->Close(); }; }; При этом на сервере событие OnDisconnect не происходит и сервер подключение не закрывает. А клиент не выдает никаких ошибок и закрывает соединение. Помогите, может советом, может кодом. з.ы. Сообщение отредактировано: Krai — 27.10.05, 09:56 |
|
Oleg2004 |
|
|
Krai |
|
exodus |
|
|
Обрабатывай ивент сокета OnError(eeDisconnet). |
|
Krai |
|
|
Тоесть предлагаете написать код со следующией логикой: А ведь всед за 10053, через некоторый промежуток времени происходит ошибка 10054 (Удаленый хост принудительно разоравал соединение). Да дело то не в том, что б отловить ошибку и погасить её (ErrorCode=0), а в том, что я хочу понять почему один и тот же код вызываемый в разных местах программы, в разные промежутки времени, в одном случаие на сервере проходит корректно, а в другом случаие вызывает ексепшн. Может дело из-за того, что у меня во второй раз метод Close() вызывается из класса который вертится в отдельном потоке? В чем проблема то? |
|
Oleg2004 |
|
|
Krai Цитата WSAECONNABORTED (10053) Software caused connection abort. WSAECONNRESET (10054) Connection reset by peer. Сообщение отредактировано: Oleg2004 — 28.10.05, 06:24 |
|
Krai |
|
|
Поборол таки. Спасибо Oleg2004, навел на нужные мысли. Сообщение отредактировано: Krai — 28.10.05, 10:34 |
|
Krai |
|
|
10.11.2005 Разобрался окончательно!!! |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Borland C++ Builder/Turbo C++ Explorer
- Следующая тема
[ Script execution time: 0,0238 ] [ 16 queries used ] [ Generated: 3.06.23, 19:50 GMT ]
|
Zerorc 1 / 1 / 1 Регистрация: 14.03.2014 Сообщений: 46 |
||||||||
|
1 |
||||||||
|
08.07.2014, 11:50. Показов 8386. Ответов 18 Метки нет (Все метки)
Всем привет. Сразу к делу. Работаю с компонентом ServerSocket, при приеме данных возникает asynchronous socket error 10053.
Принимаю в контейнер, таким вот способом, по событию чтения клиента. Так вот, открываю порт, слушаю, жду connect’a, пока все в порядке. Но как только клиент подключается, он сразу же начинает забрасывать потоком данных и не успев принять, возникает error 10053.
0 |
|
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
08.07.2014, 11:50 |
|
18 |
|
735 / 525 / 130 Регистрация: 31.05.2013 Сообщений: 2,929 Записей в блоге: 3 |
|
|
08.07.2014, 14:29 |
2 |
|
Скорее всего не хватает выделенной памяти на прием в Вашем «контейнере»
0 |
|
Zerorc 1 / 1 / 1 Регистрация: 14.03.2014 Сообщений: 46 |
||||
|
08.07.2014, 17:41 [ТС] |
3 |
|||
|
Так Вектор в том-то и дело что сам наращивается и ему все равно какой длинны он будет, пока не займет в теории всю оперативную память компьютера. Добавлено через 2 часа 21 минуту
Опять же проблема значится в алгоритме записи моем. У кого есть какие идеи как записать, если не с помощью вектора. В принципе, мне ведь все равно, идут данные подряд в памяти или нет. Можно использовать и контейнеры с указателем на следующую ячейку. Может повозиться с динамическим буфером, второй побольше создать, туда перенести, как заполнен первый а потом удалить его. Есть-какие предложения?
0 |
|
Dinkin 735 / 525 / 130 Регистрация: 31.05.2013 Сообщений: 2,929 Записей в блоге: 3 |
||||
|
08.07.2014, 18:13 |
4 |
|||
|
можно попробовать так
1 |
|
91 / 91 / 22 Регистрация: 02.07.2013 Сообщений: 332 |
|
|
09.07.2014, 10:21 |
5 |
|
Dinkin, прежде, чем ковыряться в коде, имеет смысл ознакомиться с самой ошибкой. 10053 означает «удалённый компьютер закрыл подключение». Из-за чего-то. Т.е., при попытке доступа к сокету, соединение уже разорвано. Думаю, надо смотреть клиента…
0 |
|
735 / 525 / 130 Регистрация: 31.05.2013 Сообщений: 2,929 Записей в блоге: 3 |
|
|
09.07.2014, 11:46 |
6 |
|
смысл ознакомиться с самой ошибкой. 10053 оз Так он же пишет, что при нормальной отправке данных все норм…а данная ошибка в основном распространяется на сервер, который закрывает соединение, если что-то не успел/не смог обработать по какой-либо причине.
0 |
|
c0rvax 91 / 91 / 22 Регистрация: 02.07.2013 Сообщений: 332 |
||||
|
09.07.2014, 12:03 |
7 |
|||
|
Dinkin, можешь, конечно, остаться при своих. А можешь показать код, как происходит отправка. Или хотя бы сделай предварительную проверку, активно ли подключение
0 |
|
735 / 525 / 130 Регистрация: 31.05.2013 Сообщений: 2,929 Записей в блоге: 3 |
|
|
09.07.2014, 13:05 |
8 |
|
так я то че, не мне же помогать,с меня за чем код?) а парень свой код выше показал, при каких случаях у него ошибка
0 |
|
Zerorc 1 / 1 / 1 Регистрация: 14.03.2014 Сообщений: 46 |
||||
|
10.07.2014, 11:03 [ТС] |
9 |
|||
|
Клиент, это плата, подсоединенная к чипу Withnet Ethernet W5100, она просто кидает connect и если сервер отвечает, начинает забрасывать данные. Дело в том что другая прога, которую я писал на Delphi, работает, хотя в builder’e сделал все аналогично, за исключением вектора. Там был статический буфер, набиваемый до конца, а после закрывающий соединение. И еще, как я понял Indy server работает в Thread blocking а Server socket в nonBlocking.
Особенность только в работе с платой, но дело ведь в том что на другой проге все ок, а с этими сокетами ошибки лезут вот такие. Добавлено через 5 минут
0 |
|
91 / 91 / 22 Регистрация: 02.07.2013 Сообщений: 332 |
|
|
10.07.2014, 12:24 |
10 |
|
Zerorc, ну, какие мысли. Во-первых, «буфер, набиваемый до конца, а после закрывающий соединение» — это уже неправильно. Соединение не следует закрывать, пока программа работает. Общая логика такова: открыли один раз соединение, набиваем буфер, набили отправили, очистили буфер, снова набиваем. И ничего не закрываем, соединение всегда установлено. Практика показывает, что команда на закрытие соединения может придти гораздо быстрее, чем отправляемый буфер данных. И в тот момент, когда сервер начинает что-то пытаться читать из сокета, последний уже закрыт, а то и NULL. Отсюда и ошибка 10053 возникает «удалённый компьютер закрыл подключение». Во-вторых, совершенно правильная мысль, что неверно обращаться к Connections[0]. Для того, чтобы серверу однозначно правильно что-то читать из сокетов, надо использовать передаваемый в событие OnClientRead параметр Socket, ибо это именно он готов отдать какие-то данные. А самих активных подключений [ServerSocket->ActiveConnections] может быть великое множество.
1 |
|
Zerorc 1 / 1 / 1 Регистрация: 14.03.2014 Сообщений: 46 |
||||||||||||||||
|
10.07.2014, 12:37 [ТС] |
11 |
|||||||||||||||
|
Дело в том что так было в прошлой программе и все работало, теперь я не закрываю соединение, к тому же там буфер был действительно огромный и мог принять большой обьем информации. Знаю, что лучше в файл, потом очищать буфер, дописывать в файлик и тд. Переделал код таким вот образом
что происходит. Пишет что клиент подключен, может и раз десять так написать, подряд и принимает какими-то промежутками данные. Все равно не то что нужно. Соединение не закрываю вообще.
0 |
|
c0rvax 91 / 91 / 22 Регистрация: 02.07.2013 Сообщений: 332 |
||||
|
10.07.2014, 12:58 |
12 |
|||
|
РешениеЯ говорил про это
1 |
|
Zerorc 1 / 1 / 1 Регистрация: 14.03.2014 Сообщений: 46 |
||||||||
|
10.07.2014, 13:49 [ТС] |
13 |
|||||||
|
Опа! А вот тут я не понял. Я беру получается, обращаясь к определенному соединению, которое, быть может, было когда-то но в данный момент его нет. И из-за этого ошибка 10053. Но, когда я обращаюсь к активному соединению, посредством
то данные я гарантированно получу. Так?
0 |
|
91 / 91 / 22 Регистрация: 02.07.2013 Сообщений: 332 |
|
|
10.07.2014, 14:36 |
14 |
|
Connections[] — это все активные соединения сервера. Их может быть несколько, что понятно. На то он и сервер. Допустим их 10. И тут один из клиентов, скажем 5-й, присылает данные. Читать надо данные именно из этого сокета, а не из какого-то определённого. Для этого на него и передаётся в событийную функцию ссылка.
0 |
|
1 / 1 / 1 Регистрация: 14.03.2014 Сообщений: 46 |
|
|
10.07.2014, 14:41 [ТС] |
15 |
|
Ага, все понятно. Я читал всегда с 0 соединения что в принципе было правильно, ибо клиент один и доколе соблюдение протокола оказывалось филигранным, так сказать, касаемо двух ПК, к примеру. данные именно из этого сокета, а не из какого-то определённого , то все в порядке)
0 |
|
91 / 91 / 22 Регистрация: 02.07.2013 Сообщений: 332 |
|
|
10.07.2014, 15:09 |
16 |
|
С 0 соединения можно читать, если клиент однозначно один и он регулярно не закрывает подключение. Допустим клиент отправил данные и закрыл подключение, а потом подключился ещё раз, чтобы ещё раз отправить. Так как всё это дело выполняется в некоем потоке, то вполне возможен вариант, что «старый», неиспользуемый уже сокет ещё не удалён из Connections[], ActiveConnections будет равен 2 и очередную порцию данных надо будет читать из Connections[1].
0 |
|
Zerorc 1 / 1 / 1 Регистрация: 14.03.2014 Сообщений: 46 |
||||
|
10.07.2014, 15:15 [ТС] |
17 |
|||
|
Тогда правильный ли вариант с отправкой этому клиенту сообщения, если он регулярно может сбросить соединение, к примеру, после снова подключиться. Если я все правильно понял..
Я не могу считать событие ибо событие у меня здесь — это нажатие кнопочки. Единственный выход?
0 |
|
c0rvax 91 / 91 / 22 Регистрация: 02.07.2013 Сообщений: 332 |
||||
|
10.07.2014, 15:36 |
18 |
|||
|
Я бы не так сделал. Во-первых, нет никакой гарантии, что активным является именно последний сокет из всех имеющихся. К тому же, придерживаюсь идеологии, что если сервер что-то отправляет, то надо отправлять всем клиентам. Раз все клиенты подключаются к одному серверу, то каждому надо как-то получать результаты работы других. Тот же чат, например. Один сказал, а всем пришло. Во-вторых, совершенно верно, необходимо убедиться, что подключение активно. Поэтому, чтобы убить всех зайцев, я бы посоветовал такую реализацию
1 |
|
1 / 1 / 1 Регистрация: 14.03.2014 Сообщений: 46 |
|
|
10.07.2014, 15:51 [ТС] |
19 |
|
Неплохо. Но это тогда выйдет широковещательная посылка. А если, я, к примеру, даю модулю команду отключиться. В принципе, если известен IP, его можно вытащить и по нему выбрать соединение, сравнением, пройтись по всем и отправить нужному.
0 |
|
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
10.07.2014, 15:51 |
|
19 |
Форум программистов Vingrad
|
Поиск: |
![]() ![]()
|
|
Опции темы |
| Гость_Игорь |
|
||
|
Unregistered
|
Использую компонент TClientSocket для опроса контроллера по сети Пробовал различные варианты с |
||
|
|||
| _hunter |
|
||
Эксперт Профиль
Репутация: 24
|
http://forum.vingrad.ru/index.php?showtopic=58171 ——————— Tempora mutantur, et nos mutamur in illis… |
||
|
|||
| Гость_Игорь |
|
||
|
Unregistered
|
1 ссылка) толковая, но самый интересный для меня вопрос без ответа client.cpp #include <vcl.h> на всякий случай код unit.cpp #include <vcl.h> #include «Unit1.h» MySocket->Active = true; } void __fastcall TForm1::MySocketRead(TObject *Sender, void __fastcall TForm1::MySocketError(TObject *Sender, void __fastcall TForm1::MySocketConnecting(TObject *Sender, 3 ссылка) немного юмора для поднятия настроения |
||
|
|||
| _hunter |
|
||
Эксперт Профиль
Репутация: 24
|
реакция на ошибку у тебя есть, значит осталось MySocket->Active = true; ( из __fastcall TForm1::TForm1(TComponent* Owner) ) в обработчик засунуть: ——————— Tempora mutantur, et nos mutamur in illis… |
||
|
|||
| Гость_Игорь |
|
||
|
Unregistered
|
Может еще что-то надо изменить? |
||
|
|||
| _hunter |
|
||
Эксперт Профиль
Репутация: 24
|
выскакивает в билдере? тогда отключи останов на делфийских исключениях: Tolls->Debugger Options->Language Exceptions->Stop on Delphi Exceptions ——————— Tempora mutantur, et nos mutamur in illis… |
||
|
|||
| Гость_Игорь |
|
||
|
Unregistered
|
Ошибка выскакивает и в билдере и в готовом ехе void __fastcall TForm1::MySocketError(TObject *Sender, повесил кнопку с MySocket->Active = true; теперь после сообщения об ошибке нажав кнопку сокет востанавливается 1 создавать сокет до тех пор пока !ок и как заставить не появлятся сообщение об ошибке «Asynchronous socket error 10053» или ему подобные(если неудача при попытке создания сокета цифры другие) |
||
|
|||
| Artemon |
|
||
|
а ты мне нравишься Профиль
Репутация: 7
|
В OnError сокета, устанавливай ErrorCode в NULL. ——————— Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
||
|
|||
| Гость_Игорь |
|
||
|
Unregistered
|
спасибо hunter’у, Artemon’у и Бегемоту из поста НИКАКИХ сообщений об ошибке сокета больше не вылетает даю код, мож кому пригодится //————————————————————————— #include <vcl.h> #include «Unit1.h» void __fastcall TForm1::MySocketRead(TObject *Sender, void __fastcall TForm1::MySocketError(TObject *Sender, void __fastcall TForm1::MySocketConnecting(TObject *Sender, void __fastcall TForm1::Timer1Timer(TObject *Sender) |
||
|
|||
| Dubinsky |
|
||
|
Опытный Профиль Репутация: нет
|
ErrorCode как советует сам билдер надо не в НУЛЛ ставить а в 0 , ну и вообще надо смотреть что за код ошибки ! там не только отсутствие связи , но и ещё куча …на них то наверняка надо как то по другому реагировать … |
||
|
|||
![]() ![]()
|
| Правила форума «С++ Builder» | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
| 0 Пользователей: |
| « Предыдущая тема | C++ Builder | Следующая тема » |

















Сообщение было отмечено Zerorc как решение





























