Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Сетевое программирование
Перезагрузить страницу WinSock, ошибка при заполнении полей TSockAddr
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
MDmitry_ MDmitry_ вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.02.2011
По умолчанию WinSock, ошибка при заполнении полей TSockAddr - 11.04.2011, 22:57

Не могу понять где ошибка
delphi Код:
// ---------- Создание сокета --------------------------------------------------
// - IpAddres - ip-адрес
// - Port - номер порта
// - TypeSocket - тип сокера (UDP,TCP)
procedure TPredokClientServer.CreateSocket(IpAddres:string;Port:word;TypeSocket:char);
begin
  // Формируем адрес сервера, к которому надо подключиться
  // FillChar - стандартная процедура Паскаля, некоторую область памяти заданными
  // значениями. В данном случае 0
  FillChar(FSocketAddr.sin_zero,SizeOf(FSocketAddr.sin_zero),0);
  // Семейство протоколов
  FSocketAddr.sin_family:=AF_INET;
  // Ip-адрес
  // inet_addr - для преобразования адреса из строки в 32-х битное число
  FSocketAddr.sin_addr.S_addr := inet_addr(PChar(IpAddres));
  // Для совместимости со старыми версиями Delphi приводим константу INADDR_NONE
  // к типу u_long
  if FSocketAddr.sin_addr.S_addr = u_long(INADDR_NONE) then
  begin
    MessageDlg('Синтаксическая ошибка в IP-адресе',mtError,[mbOK],0);
    Exit;
  end;
  // Преобразование в сетевой формат
  // Функция htons служит для преобразования номера порта из привычного нам в
  // сетевой. Если номер порта оставить нулевым, то система сама выберет для
  // сокета свободный порт с номером от 1024 до 5000
  FSocketAddr.sin_port:=htons(Port);
  // Создание сокета
  // function socket (AF,SocketType,Protocol:Integer):TSocket;
  // - AF - какой стек протоколов используется (для TCP/IP - AF_INET)
  // - SocketType - тир сокета (SOCK_STREAM - потоковый, SOCK_DGRAM - дейтаграммный)
  // - Protocol - тип протокола TCP - потоковый, UDP - дейтаграммный
  case TypeSocket of
    'T':FSocket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    'U':FSocket:=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
  end;
  if FSocket = INVALID_SOCKET then
  begin
    MessageDlg('Ошибка при создании сокета: '#13#10 + GetErrorString, mtError, [mbOK], 0);
    Exit;
  end;
end;

Вылетает на строчке FillChar(FSocketAddr.sin_zero,SizeOf(FSocketAddr.s in_zero),0); с ошибкой raised exception class EAccessViolation with message 'Access violation at address 00402B2C in module Project1.exe'. Write of address '00000010' и т.д.

Заранее благодарен
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 12.04.2011, 00:58

Поставьте в этом месте точку останова, перейдите в окно CPU и посмотрите, что происходит
Ответить с цитированием
  (#3 (permalink)) Старый
MDmitry_ MDmitry_ вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.02.2011
По умолчанию 12.04.2011, 04:35

А что именно посмотреть?

Вот в принципе оно во время ошибки
Ответить с цитированием
  (#4 (permalink)) Старый
MDmitry_ MDmitry_ вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.02.2011
По умолчанию 12.04.2011, 04:36

Visual Prolog Код:
http://www.imageup.ru/img84/bezymyannyjj627297.png
Ответить с цитированием
  (#5 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 12.04.2011, 10:18

Цитата:
Сообщение от MDmitry_ Посмотреть сообщение
А что именно посмотреть?
1) Корректность параметров, попадающих в FillChar
2) Происходит ли ошибка в самом FillChar (из-за некорректного адреса области) или при выходе из FillChar (из-за некорректной длины области и разрушения стека)

Цитата:
Сообщение от MDmitry_ Посмотреть сообщение
Вот в принципе оно во время ошибки
1) Во время ошибки смотреть уже поздно, надо перед ошибкой
2) В статике это достаточно сложно

Если не можете сами, выложите нужный кусок проекта или хотя бы exe
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
MDmitry_ MDmitry_ вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.02.2011
По умолчанию 15.04.2011, 03:38

там объект класса не был иниализирован
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исходники TCP (Winsock) чата на C++ с GUI MrRockchip Вопросы начинающих программистов 1 26.02.2011 13:41
Ошибка при модификации (Edit) полей в Aссess Богомаз Сергей SQL 8 02.02.2010 14:59
При заполнении флешки jetflash 16 gb на половину выскакивает ошибка защиты от записи. янешарю Техническая поддержка 1 05.02.2009 13:44
USB-flesh Traxdata 8Gb при заполнении более чем на половину кодируются названия папок Den13V Техническая поддержка 10 25.03.2008 16:58
При заполнении данными в ListView поевляется вертикальная прокрутка - как ее отключит stikker C++ Builder 2 12.09.2007 18:16
Обеспечить ввод полей класса, создать методы для ввода и вычисления полей renara1 C++ Builder 2 29.06.2007 02:03
WinSock как очистить буфер Diplom@t WinAPI 6 03.11.2006 14:05
колобродица в winsock.getdata FlamerZ Visual Basic 2 07.09.2006 11:36
Ошибка форматов полей базы данных SilverV Delphi 5 16.04.2006 21:03
Почтовая функция winsock c++ ZenAS Сетевое программирование 4 13.03.2005 19:48
Где найти учебник о WinSock FOBOSX C++ Builder 0 27.01.2005 22:21
WinSock и TCP/IP Horzer Visual Basic 2 01.11.2003 21:29



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов