![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не доходит значение типа integer [D7, WinXP]
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-ой строке