Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446

Как правильно закрыть сокет для последующего его открытия

23.04.2014, 01:32. Показов 2083. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

У меня 2 формы(клиент сервер). На форме улиента есть кнопка Disconnect. По ее нажатию серверу отправляется команда "END" и он выполняет метод socket.Close. Однако когда после этого закрыть форму сервера и снова запустить, то вылетает ошибка, пишет, что порт используется. Жму End. Запускаю опять - ок.

Как правильно закрыть сокет?

Заранее спс!
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2014, 01:32
Ответы с готовыми решениями:

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

Как правильно упаковать модуль для последующего вывода в материалы
Не могу никак упаковать модуль что бы потом его вывести в материал. Скажите что не так в файлах Если вывожу в материалы он просто...

Функции для записи в сокет и чтения из сокета: как правильно задать для windows?
делала проект под Linux и в нем успешно работали write и read. Но теперь мне нужно перекомпилировать под windows. кто-нибудь знает какие...

6
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
23.04.2014, 09:28
Что за класс, библиотека у экземпляра "socket"? Точно не попутали форум? Если нет, прикрепите документ с формами и др. модулями, запаковав его в .zip, если файл имеет расширение, отличное от разрешенных.
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
23.04.2014, 12:11  [ТС]
Насчет клааса не скажу, т.е. это сделано в Excel. Я подключал коспонент WinSock и использовал.

socketDemo.rar
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
23.04.2014, 12:12  [ТС]
Цитата Сообщение от mc-black Посмотреть сообщение
Точно не попутали форум?
Это вы к чему?
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
24.04.2014, 11:52
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от some_name Посмотреть сообщение
Это вы к чему?
К тому что, подумал, что вопрос относится к другому языку программирования, так как VBA, Office, Windows не содержат по умолчанию никакого WinSock (во всяком случае его нет в моей конфигурации). Что это такое, я знаю, причем знаю по старому VB6 (как раз там такой контрол был). Использованное слово "компонент" вообще относится к Delphi, но никак не к VBA. Так как проект не был прикреплен к теме, а также не было никакого контрола на рабочем компе, отвечать не было особого смысла. Сейчас можно посмотреть.

Добавлено через 1 час 15 минут
К сожалению, этот контрол я себе установить не могу - нет админских прав, смог только посмотреть код. Есть предположение, что надо при отправке команды "END" не только закрывать сокет со стороны сервера, но и со стороны клиента, то есть в обработчике кнопки Send:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub btnSendData_Click()
    Dim data As String
    If socketClient.State <> sckConnected Then
        MsgBox "Connection is not set up"
        Exit Sub
    End If
    If obSql.Value = True Then
        data = tbSqlQuety.Text
    Else
        data = tbMessage.Text
    End If
    socketClient.SendData data
    If data = "END" Then
        socketClient.Close
        MsgBox "Сервер отключен"
    End If
End Sub
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,701
Записей в блоге: 14
24.04.2014, 17:02
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Рекомендую поступать так. После вызова метода close входить в бесконечный цикл и проверять свойство winsock1.Status. Выходить из цикла когда свойство=0:

Visual Basic
1
2
3
4
  Do
     if winsock1.Status=0 then Exit Do
     DoEvents
  Loop
1
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
24.04.2014, 21:28
Catstail полностью прав, надо дождаться, когда сокет закроется. Это надо сделать и на стороне клиента, и на стороне сервера. А вообще, как вариант, можно воспользоваться API'шными сокетами Windows в оболочке-классе. Всё равно же пример на winsock.ocx платформозависимый, так выжать из системы то, что в ней заложено и тем способом, который подходит.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2014, 21:28
Помогаю со студенческими работами здесь

Как создать массив экземпляров класса для последующего обращения к его элементам по ссылке?
Всем здравствуйте. Вот код моего класса: class Param { private: int cnt; float akk; int val; public:

Выбрав поле в таблице, как его заблокировать для последующего выбора и затем снова разблокировать
Здравствуйте! Подскажите как реализовать : имеется таблица с табуретами с индивидуальными инвентарными номерами, имеется таблица...

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

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

TServerSocket и TClientSocket в блокирующем режиме (stThreadBlocking) Как закрыть сокет?
Использую TServerSocket и TClientSocket, в Delphi XE таких компонентов нету, поэтому приходится &quot;вручную&quot; работать с этими...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru