Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.04.2012, 18:14
Аватар для Klassenas
Klassenas Klassenas вне форума
Новичок
 
Регистрация: 25.05.2009
Адрес: Казахстан, Павлодар
Сообщения: 87
Версия Delphi: Rad Studio 2010
Репутация: 1570
По умолчанию Сокеты

Решил законнектить клиентсеую прогу с серверной при помощи TSocketConnection.
Пока вместе с серверной прогой запущен ScktSrvr.exe, всё работает отлично.
Но я решил от ScktSrvr.exe избавиться.
Покопался в DelphiWorld, нашёл там компонент TSocketDispatcher.
Кинул его на форму, сделал Active:=True; порт присвоил 211.
Скомпилил, запустил, а клиент с ним не коннектится.
При этом сервер выдаёт сообщение об ошибке:
"Access violation at address 00000000. Read of address 00000000."
Кто-нибудь знает, как этот косяк исправить?
__________________
Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому

Последний раз редактировалось Klassenas, 16.04.2012 в 21:40.
Ответить с цитированием
  #2  
Старый 16.04.2012, 13:38
Аватар для Klassenas
Klassenas Klassenas вне форума
Новичок
 
Регистрация: 25.05.2009
Адрес: Казахстан, Павлодар
Сообщения: 87
Версия Delphi: Rad Studio 2010
Репутация: 1570
По умолчанию

Как я понял, этот компонент дублирует код из исходников ScktSrvr.exe.
Ошибка возникает в процедуре TSocketDispatcherThread.ClientExecute, в строке Event := FTransport.GetWaitEvent, при этом вызывается метод TSocketTransport.GetWaitEvent, находящийся в модуле SConnect.pas, где и происходит сбой при выполнении комады FEvent := WSACreateEvent;
Причём WSACreateEvent объявлена как переменная типа функция и значение ей присваивается в LoadWinSock2 из модуля SConnect.
Поставив брэйкпоинты в методе LoadWinSock2, я не заметил, чтобы он был вызван.
По ходу он не вызывается, переменная остаётся пустой, и при попытке к ней обратиться и возникает тот самый Access Violation.
Теперь вот думаю, как от этой ошибки избавиться.
Буду признателен, если кто-нибудь поможет думать.
__________________
Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому
Ответить с цитированием
  #3  
Старый 16.04.2012, 14:01
Аватар для Klassenas
Klassenas Klassenas вне форума
Новичок
 
Регистрация: 25.05.2009
Адрес: Казахстан, Павлодар
Сообщения: 87
Версия Delphi: Rad Studio 2010
Репутация: 1570
По умолчанию

Решение оказалось простым, как 3 рубля:
В методе TSocketDispatcherThread.ClientExecute перед строкой Event := FTransport.GetWaitEvent написал LoadWinSock2;
В результате всё работает правильно, никаких ошибок не возникает!
Выкладываю исправленный компонент.
И никакого ScktSrvr.exe!
Вложения
Тип файла: rar Sck.rar (1.8 Кбайт, 10 просмотров)
__________________
Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:20.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025