Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

не доходит значение типа integer [D7, WinXP]


Страницы:   1 2

Dmitry_177 ©   (2007-04-28 22:14:00) 

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


Dmitry_177   (2007-05-02 15:02:00) [21]

а что тогда делать? вызывать заново recv? как тогда мне получить значение типа integer и структуру TSelectDatapacket из этих двух recv-ов?


Сергей М.   (2007-05-02 12:37:00) [22]


> Dmitry_177   (02.05.07 11:26) [9]


Если ты вызовом recv() запросил к чтению N байт и ф-ция возвратила рез-т >= 0, то это вовсе не означает , что приняты запрошенные N байт !!!!


Dmitry_177   (2007-05-02 11:57:00) [23]

Блин, слишком длинный код, по частям долго добавлять.. Еще раз залил архив:
http://slil.ru/24318225


Dmitry_177   (2007-05-02 11:54:00) [24]

Выкладываю:

Exchange.pas

unit Exchange;

interface

uses
 Windows;

const
 KL_HELLO               = 111;
 KL_HELLO_OK            = 222;

 KL_FIND                = 001;
 KL_FIND_OK             = 002;
 KL_FIND_NEXT           = 003;

 KL_CHECK               = 100;
 KL_CHECK_OK            = 200;

 KL_EXIT                = 999;

type
 TDataPacket = packed record
   Name: array [0 .. 254] of Char;
   UrAddress: array [0 .. 254] of Char;
   FkAddress: array [0 .. 254] of Char;
   Telephone: array [0 .. 54] of Char;
   Fax: array [0 .. 54] of Char;
   Email: array [0 .. 54] of Char;
   WWWPage: array [0 .. 254] of Char;
   Activity: array [0 .. 254] of Char;
   Director: array [0 .. 254] of Char;
   ContPerson: array [0 .. 254] of Char;
   Bank: array [0 .. 254] of Char;
   INN: array [0 .. 254] of Char;
   SetAccount: array [0 .. 254] of Char;
   CorAccount: array [0 .. 254] of Char;
   BIK: array [0 .. 254] of Char;
   OKPO: array [0 .. 254] of Char;
   Okato: array [0 .. 254] of Char;
   KPP: array [0 .. 254] of Char;
   NContract: array [0 .. 254] of Char;
   LowDate: SYSTEMTIME;
   HightDate: SYSTEMTIME;
   Note: array [0 .. 254] of Char;
 end;

 TSelectDataPacket = packed record
   Name: array [0 .. 254] of Char;
   Code: Longint;
 end;

 TFindDataPacket = packed record
   DataPacket: TDataPacket;
   ContractType: (ctNContract, ctLowDate, ctHightDate, ctNone);
 end;

implementation

end.


clickmaker   (2007-05-02 11:41:00) [25]


> [9] Dmitry_177   (02.05.07 11:26)

архив поврежден
Ты бы лучше код показал


Сергей М.   (2007-05-02 11:40:00) [26]


> выскакивает "1 Ошибка", вот с чем это связано никак не пойму


С тем что SelectDataPacket.Code = 0

А вообще код в TForm1.Button2Click простожуткий, разбираться в этой "лестнице" нет никакого желания.


Dmitry_177   (2007-05-02 11:26:00) [27]

Вот сильно упрощенный вариант..
http://slil.ru/24318084
Нужно запустить KLServer.exe, потом KLClient.exe, там прописать свой же IP если сервер запущен на этом же компьютере и нажать "Connect", потом если нажимать много раз "Find"(бывает с и с первого раза, бывает на 20й), бывает выскакивает "1 Ошибка", вот с чем это связано никак не пойму...  Подскажите пожалуйста..


Сергей М.   (2007-05-02 08:34:00) [28]


> что здесь может быть неправильного?


Неправильным может быть отсутствие в твоем алгоритме анализа результатов, которые эти функции возвращают.


DVM   (2007-04-30 16:58:00) [29]

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


Ketmar   (2007-04-29 17:03:00) [30]

а может вам, барин, сначала почитать умные книги по WinSock и TCP? тогда не будет феерических вопросов типа "может, буфер как-то очистить?"

и настоятельно советую проверить 17-ю строку. она, зараза, часто шибко кривая.


Dmitry_177   (2007-04-29 16:07:00) [31]

на отправляющей стороне send(), на принимающей recv(), что здесь может быть неправильного? Я вот думаю то что потом странно как-то происходит, то что последующий вызов select и recv возвращают значение больше чем 0, а на самом деле ничего не отправлялось.. такое ощущение что при отправки этого числа, в буфере уже что-то есть и отправляется уже не число а ерунда.. только я посмотрел насчет этого, то вроде все нормально...((( как можно проверить есть ли данные буфере? или может очищать их как-то?


Dmitrij_K   (2007-04-29 15:56:00) [32]

Dmitry_177
ищи ошибку в коде
или отправляешь неправильно, или принимаешь или все вместе


Dmitry_177   (2007-04-29 15:09:00) [33]

просто у меня как-то странно то что в отладчике я вижу что отправляется, все как надо, а вот на принимающей стороне почему-то приходит число 0, хотя там не 0


Belorus   (2007-04-29 14:37:00) [34]

Согласен с Дмитрием.


Dmitrij_K   (2007-04-29 11:45:00) [35]


> Использую WinSock, протокол TCP, может ли быть такое что
> не доходит значение типа integer?

нет
ошибка в 17-ой строке


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо