Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Не возвращается количество полученных байт в блокирующисокетах???   Найти похожие ветки 

 
Digitman ©   (2004-03-19 16:35) [40]


> slgeo


слухай сюда ...

при всем моем уважении к тебе, искренне пытающегося найти "первопричину", и к Андрею, искренне пытающегося наставить тебя на путь истинный (имея на о колоссальный практ. им теор. опыт), репу свою чесать по поводу "глюков" должен, в 1-ю очередь, именно ТЫ, и никто иной  ...

и у тепя, мил мой, коль скоро ты пользуешь Делфи, под рукой всегда есть великолепный инструмент под названием Интегрированный Отладчик Делфи ... и какого шута ты им не пользуешься по сей момент - это для нас с Андреем и коллегами составляет великую гостайну ... в каковую (в тайности применения которого в поисках истины) без твоего высочайшего соизволения мы не имеем возможности "въехать"


 
Digitman ©   (2004-03-19 16:35) [40]


> slgeo


слухай сюда ...

при всем моем уважении к тебе, искренне пытающегося найти "первопричину", и к Андрею, искренне пытающегося наставить тебя на путь истинный (имея на о колоссальный практ. им теор. опыт), репу свою чесать по поводу "глюков" должен, в 1-ю очередь, именно ТЫ, и никто иной  ...

и у тепя, мил мой, коль скоро ты пользуешь Делфи, под рукой всегда есть великолепный инструмент под названием Интегрированный Отладчик Делфи ... и какого шута ты им не пользуешься по сей момент - это для нас с Андреем и коллегами составляет великую гостайну ... в каковую (в тайности применения которого в поисках истины) без твоего высочайшего соизволения мы не имеем возможности "въехать"


 
Digitman ©   (2004-03-19 16:36) [41]


> slgeo


слухай сюда ...

при всем моем уважении к тебе, искренне пытающегося найти "первопричину", и к Андрею, искренне пытающегося наставить тебя на путь истинный (имея на о колоссальный практ. им теор. опыт), репу свою чесать по поводу "глюков" должен, в 1-ю очередь, именно ТЫ, и никто иной  ...

и у тепя, мил мой, коль скоро ты пользуешь Делфи, под рукой всегда есть великолепный инструмент под названием Интегрированный Отладчик Делфи ... и какого шута ты им не пользуешься по сей момент - это для нас с Андреем и коллегами составляет великую гостайну ... в каковую (в тайности применения которого в поисках истины) без твоего высочайшего соизволения мы не имеем возможности "въехать"


 
Digitman ©   (2004-03-19 16:36) [41]


> slgeo


слухай сюда ...

при всем моем уважении к тебе, искренне пытающегося найти "первопричину", и к Андрею, искренне пытающегося наставить тебя на путь истинный (имея на о колоссальный практ. им теор. опыт), репу свою чесать по поводу "глюков" должен, в 1-ю очередь, именно ТЫ, и никто иной  ...

и у тепя, мил мой, коль скоро ты пользуешь Делфи, под рукой всегда есть великолепный инструмент под названием Интегрированный Отладчик Делфи ... и какого шута ты им не пользуешься по сей момент - это для нас с Андреем и коллегами составляет великую гостайну ... в каковую (в тайности применения которого в поисках истины) без твоего высочайшего соизволения мы не имеем возможности "въехать"


 
Digitman ©   (2004-03-19 16:36) [42]


> slgeo


слухай сюда ...

при всем моем уважении к тебе, искренне пытающегося найти "первопричину", и к Андрею, искренне пытающегося наставить тебя на путь истинный (имея на о колоссальный практ. им теор. опыт), репу свою чесать по поводу "глюков" должен, в 1-ю очередь, именно ТЫ, и никто иной  ...

и у тепя, мил мой, коль скоро ты пользуешь Делфи, под рукой всегда есть великолепный инструмент под названием Интегрированный Отладчик Делфи ... и какого шута ты им не пользуешься по сей момент - это для нас с Андреем и коллегами составляет великую гостайну ... в каковую (в тайности применения которого в поисках истины) без твоего высочайшего соизволения мы не имеем возможности "въехать"


 
Digitman ©   (2004-03-19 16:36) [42]


> slgeo


слухай сюда ...

при всем моем уважении к тебе, искренне пытающегося найти "первопричину", и к Андрею, искренне пытающегося наставить тебя на путь истинный (имея на о колоссальный практ. им теор. опыт), репу свою чесать по поводу "глюков" должен, в 1-ю очередь, именно ТЫ, и никто иной  ...

и у тепя, мил мой, коль скоро ты пользуешь Делфи, под рукой всегда есть великолепный инструмент под названием Интегрированный Отладчик Делфи ... и какого шута ты им не пользуешься по сей момент - это для нас с Андреем и коллегами составляет великую гостайну ... в каковую (в тайности применения которого в поисках истины) без твоего высочайшего соизволения мы не имеем возможности "въехать"


 
slgeo   (2004-03-19 16:55) [43]

> Digitman
А то что я выяснил что возвращает функция хочешь сказать мне винда вывалила большими буквами на синем экране?

То что чешу репу уже третий день и только после долгих и бесполезных действий обратился за помощью в форум, а кроме
споров двух, "имеющих колоссальный практ. им теор. опыт" админов я не увидел... то, о чем вы спорили, перепробовано в течение месяца согласно правилам камасутры и Билла...
   Вопрос был следующим... Кратко...
Почему, при соблюдении правил программирования, как основных так и не очень, прога работает на одном железе и не работает на другом?
   Это ИЗ-ЗА ЖЕЛЕЗА, Винды (имеется в виду SP) или же моих кривых рук, которые уже написали довольно боьшое кол-во софта на Делфи...
   Перед тем как обвинять кого-то в некомпетентности есть смысл проверить... Вы проверяли? На Винде с первым и вторым сервис паком? нет? так я и думал...
а что вы на это скажете?:
function GetOverlappedResult; external kernel32 name "GetOverlappedResult";


 
slgeo   (2004-03-19 16:55) [43]

> Digitman
А то что я выяснил что возвращает функция хочешь сказать мне винда вывалила большими буквами на синем экране?

То что чешу репу уже третий день и только после долгих и бесполезных действий обратился за помощью в форум, а кроме
споров двух, "имеющих колоссальный практ. им теор. опыт" админов я не увидел... то, о чем вы спорили, перепробовано в течение месяца согласно правилам камасутры и Билла...
   Вопрос был следующим... Кратко...
Почему, при соблюдении правил программирования, как основных так и не очень, прога работает на одном железе и не работает на другом?
   Это ИЗ-ЗА ЖЕЛЕЗА, Винды (имеется в виду SP) или же моих кривых рук, которые уже написали довольно боьшое кол-во софта на Делфи...
   Перед тем как обвинять кого-то в некомпетентности есть смысл проверить... Вы проверяли? На Винде с первым и вторым сервис паком? нет? так я и думал...
а что вы на это скажете?:
function GetOverlappedResult; external kernel32 name "GetOverlappedResult";


 
Digitman ©   (2004-03-19 17:11) [44]


> а что вы на это скажете?:


для начала я скажу, что твой исх.текст, реализующий алгоритм транспорта  - большая каша ..


 
Digitman ©   (2004-03-19 17:11) [44]


> а что вы на это скажете?:


для начала я скажу, что твой исх.текст, реализующий алгоритм транспорта  - большая каша ..


 
Verg ©   (2004-03-19 17:11) [45]


> function GetOverlappedResult; external kernel32 name "GetOverlappedResult";


А что на это должны сказать?
Функция такая из kernel32. Возвращает результат выполнения Overlapped IO.

Если ф-ция WaitFor возвращает Signaled, а кол-во принятых байт равно нулю, то это значит, что соединение было закрыто.

Все, и не только это бесчисленное число раз проверялось и не только мной (нами), но и тысячами работоспособных программ.


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


Я уже тебе говорил выше [17],[18], что процедура приема сделана неверно.


>        SetLength(Buf, 18);
>        nRead := Stream.Read(Buf[1], 18);
> //      SetLength(Buf, nRead); если убрать комментарий то
> Buf очищается        
>        if POS("UPDATE!",Buf)=1  then
>        begin


И здесь тоже неверно. Кто тебе обещал, что Read примет всю заголовочную строку за раз?

Все это, конечно, справедливо если драйвера TCP/IP не повреждены.


 
Verg ©   (2004-03-19 17:11) [45]


> function GetOverlappedResult; external kernel32 name "GetOverlappedResult";


А что на это должны сказать?
Функция такая из kernel32. Возвращает результат выполнения Overlapped IO.

Если ф-ция WaitFor возвращает Signaled, а кол-во принятых байт равно нулю, то это значит, что соединение было закрыто.

Все, и не только это бесчисленное число раз проверялось и не только мной (нами), но и тысячами работоспособных программ.


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


Я уже тебе говорил выше [17],[18], что процедура приема сделана неверно.


>        SetLength(Buf, 18);
>        nRead := Stream.Read(Buf[1], 18);
> //      SetLength(Buf, nRead); если убрать комментарий то
> Buf очищается        
>        if POS("UPDATE!",Buf)=1  then
>        begin


И здесь тоже неверно. Кто тебе обещал, что Read примет всю заголовочную строку за раз?

Все это, конечно, справедливо если драйвера TCP/IP не повреждены.


 
slgeo   (2004-03-19 17:29) [46]

Минутку... если повреждены драйвера, сеть будет работать?


 
slgeo   (2004-03-19 17:29) [46]

Минутку... если повреждены драйвера, сеть будет работать?


 
Verg ©   (2004-03-19 17:46) [47]

NetBEUI?


 
Verg ©   (2004-03-19 17:46) [47]

NetBEUI?


 
slgeo   (2004-03-19 18:05) [48]

Обычный TCP/IP. Работает аська, инет через вингейт, работает вся сеть... в этой сети на двух машинах прога работает, на трех не работает...


 
slgeo   (2004-03-19 18:05) [48]

Обычный TCP/IP. Работает аська, инет через вингейт, работает вся сеть... в этой сети на двух машинах прога работает, на трех не работает...


 
Verg ©   (2004-03-19 18:44) [49]

Вот тут кусочек от клиента HTTP-шного.
Упростил все "до дуры" - попробуй запустить на "плохой" машинке.
IP адрес, порт и текст запроса по-месту изменишь на какой нужно.

Там два режима приема - через ReadFile и через recv. Попробуй оба.

Что скажет?

program Client;
{$APPTYPE CONSOLE}

uses
 Windows,
 WinSock,
 SysUtils,
 SyncObjs;

var A : TSockAddrIn;
   S : TSocket;
   WSAData : TWSAData;
   Ret : integer;
   Buffer : array[0..255] of char;
   Ostr : string;
   FEvent : TEvent;
   RecvSize : DWORD;

function ToOem(const S : string):string;
begin
 Result := S;
 CharToOemBuff(pchar(Result), pchar(Result), length(Result));
end;

procedure PrintErr(Err : DWORD);
begin
 Writeln(ToOem(SysErrorMessage(Err)));
end;

function checksocket(Ret : integer):boolean;
begin
 Result := Ret = SOCKET_ERROR;
 if Result then
 begin
   PrintErr(Ret);
   Readln;
 end;
end;

function Receive_Mode1: integer;
begin
 result := recv(S, Buffer, sizeof(buffer), 0);
end;

function Receive_Mode2: integer;
var
 Overlapped: TOverlapped;
begin
 FillChar(OVerlapped, SizeOf(Overlapped), 0);
 Overlapped.hEvent := FEvent.Handle;
 if not ReadFile(S, Buffer, sizeof(buffer), DWORD(Result),
    @Overlapped) and (GetLastError <> ERROR_IO_PENDING) then
 begin
   Writeln;
   PrintErr( GetLastError );
   Result := SOCKET_ERROR;
 end else
 if FEvent.WaitFor(INFINITE) <> wrSignaled then
 else begin
   GetOverlappedResult(S, Overlapped, DWORD(Result), False);
   FEvent.ResetEvent;
 end;
end;

begin
 Ret := WSAStartup(MAKEWORD(1,1), WSAData);
 if  Ret = NO_ERROR then
 try
   FEvent := TEvent.Create(nil, true, false, "");
   S := socket(PF_INET, SOCK_STREAM, 0);
   if S = INVALID_SOCKET then
   begin
     PrintErr(WSAGetLastError);
     readln;
     exit;
   end;
   try
     FillChar(A, sizeof(A), 0);
     A.sin_family := AF_INET;
     A.sin_port   := htons( 80 );
     A.sin_addr.S_addr := inet_addr("194.67.57.51");
     if checksocket(connect(S, A, sizeof(A))) then
       exit;
     Ostr := "GET / HTTP/1.0"#13#10#13#10;
     if checksocket(send(S, Ostr[1], length(Ostr), 0)) then
       exit;
     RecvSize := 0;
     repeat
       Ret := Receive_Mode2;
       if checksocket(Ret) then
         exit;
       if Ret = 0 then
       begin
         Writeln;
         WriteLn("------- Disconnected bytes received---:", RecvSize);
         readln;
         exit;
       end;
       Inc(RecvSize, Ret);
       SetString(Ostr, Buffer, Ret);
       Write(ToOem(OStr));
     until false;
   finally
     closesocket(S);
   end;
 finally
   WSACleanup;
   FEvent.Free;
 end else
 begin
   PrintErr(Ret);
   readln;
 end;
end.


 
Verg ©   (2004-03-19 18:44) [49]

Вот тут кусочек от клиента HTTP-шного.
Упростил все "до дуры" - попробуй запустить на "плохой" машинке.
IP адрес, порт и текст запроса по-месту изменишь на какой нужно.

Там два режима приема - через ReadFile и через recv. Попробуй оба.

Что скажет?

program Client;
{$APPTYPE CONSOLE}

uses
 Windows,
 WinSock,
 SysUtils,
 SyncObjs;

var A : TSockAddrIn;
   S : TSocket;
   WSAData : TWSAData;
   Ret : integer;
   Buffer : array[0..255] of char;
   Ostr : string;
   FEvent : TEvent;
   RecvSize : DWORD;

function ToOem(const S : string):string;
begin
 Result := S;
 CharToOemBuff(pchar(Result), pchar(Result), length(Result));
end;

procedure PrintErr(Err : DWORD);
begin
 Writeln(ToOem(SysErrorMessage(Err)));
end;

function checksocket(Ret : integer):boolean;
begin
 Result := Ret = SOCKET_ERROR;
 if Result then
 begin
   PrintErr(Ret);
   Readln;
 end;
end;

function Receive_Mode1: integer;
begin
 result := recv(S, Buffer, sizeof(buffer), 0);
end;

function Receive_Mode2: integer;
var
 Overlapped: TOverlapped;
begin
 FillChar(OVerlapped, SizeOf(Overlapped), 0);
 Overlapped.hEvent := FEvent.Handle;
 if not ReadFile(S, Buffer, sizeof(buffer), DWORD(Result),
    @Overlapped) and (GetLastError <> ERROR_IO_PENDING) then
 begin
   Writeln;
   PrintErr( GetLastError );
   Result := SOCKET_ERROR;
 end else
 if FEvent.WaitFor(INFINITE) <> wrSignaled then
 else begin
   GetOverlappedResult(S, Overlapped, DWORD(Result), False);
   FEvent.ResetEvent;
 end;
end;

begin
 Ret := WSAStartup(MAKEWORD(1,1), WSAData);
 if  Ret = NO_ERROR then
 try
   FEvent := TEvent.Create(nil, true, false, "");
   S := socket(PF_INET, SOCK_STREAM, 0);
   if S = INVALID_SOCKET then
   begin
     PrintErr(WSAGetLastError);
     readln;
     exit;
   end;
   try
     FillChar(A, sizeof(A), 0);
     A.sin_family := AF_INET;
     A.sin_port   := htons( 80 );
     A.sin_addr.S_addr := inet_addr("194.67.57.51");
     if checksocket(connect(S, A, sizeof(A))) then
       exit;
     Ostr := "GET / HTTP/1.0"#13#10#13#10;
     if checksocket(send(S, Ostr[1], length(Ostr), 0)) then
       exit;
     RecvSize := 0;
     repeat
       Ret := Receive_Mode2;
       if checksocket(Ret) then
         exit;
       if Ret = 0 then
       begin
         Writeln;
         WriteLn("------- Disconnected bytes received---:", RecvSize);
         readln;
         exit;
       end;
       Inc(RecvSize, Ret);
       SetString(Ostr, Buffer, Ret);
       Write(ToOem(OStr));
     until false;
   finally
     closesocket(S);
   end;
 finally
   WSACleanup;
   FEvent.Free;
 end else
 begin
   PrintErr(Ret);
   readln;
 end;
end.


 
Digitman ©   (2004-03-19 18:47) [50]


> slgeo


все твои беды  - от неумения грамотно построить алгоритм для конкретных условий и ПИО

вот псевдокод, который НАМНОГО упрощает и воспритие кода и его отладку :

procedure TSomeTransportThread.Execute;
begin
 Transport := CreateTransport;
 try
  Requestparams := GetRequestParams(..);
  Context := SendRequest(Transport, Requestparams);
  Response := ReceiveResponse(Transport, Context);
 finally
   Transport := nil;
 exit;
end;


 
Digitman ©   (2004-03-19 18:47) [50]


> slgeo


все твои беды  - от неумения грамотно построить алгоритм для конкретных условий и ПИО

вот псевдокод, который НАМНОГО упрощает и воспритие кода и его отладку :

procedure TSomeTransportThread.Execute;
begin
 Transport := CreateTransport;
 try
  Requestparams := GetRequestParams(..);
  Context := SendRequest(Transport, Requestparams);
  Response := ReceiveResponse(Transport, Context);
 finally
   Transport := nil;
 exit;
end;


 
slgeo   (2004-03-19 19:27) [51]

>Verg
через recv пишет
------- Disconnected bytes received---: 51603
через ReadFile пишет
------- Disconnected bytes received---: 0

Что и требовалось доказать!
Только посоветуйте как быть,пожалуйста,с меня много-много пива :)
Переделывать все на recv?


 
slgeo   (2004-03-19 19:27) [51]

>Verg
через recv пишет
------- Disconnected bytes received---: 51603
через ReadFile пишет
------- Disconnected bytes received---: 0

Что и требовалось доказать!
Только посоветуйте как быть,пожалуйста,с меня много-много пива :)
Переделывать все на recv?


 
slgeo   (2004-03-19 19:31) [52]

Я даже kernel32.dll менял, где эта долбанная функция ReadFile, все равно никакой реакции, те же глюки


 
slgeo   (2004-03-19 19:31) [52]

Я даже kernel32.dll менял, где эта долбанная функция ReadFile, все равно никакой реакции, те же глюки


 
Verg ©   (2004-03-19 20:26) [53]

Не знаю. Лучший способ - переустановить винды полностью. Со всеми сериспаками, так как оба способа (recv, ReadFile) работают нормально и абсолютно безглючно.

Не забудь, однако, про [17],[18] и прочие посты - это ОЧЕНЬ важно, и о совершенно "в десятку" замечаниях и оценках Digitman-а.
В следующий раз попробуй не "лезть в бутылку".


 
Verg ©   (2004-03-19 20:26) [53]

Не знаю. Лучший способ - переустановить винды полностью. Со всеми сериспаками, так как оба способа (recv, ReadFile) работают нормально и абсолютно безглючно.

Не забудь, однако, про [17],[18] и прочие посты - это ОЧЕНЬ важно, и о совершенно "в десятку" замечаниях и оценках Digitman-а.
В следующий раз попробуй не "лезть в бутылку".


 
slgeo   (2004-03-19 20:49) [54]

переустановка ОС не входит в планы (клиенты злые и неотзывчивые намечаются, причем территориально достаточно удаленные), поэтому обйдемся пока recv. Еще раз будем знать, что надо поглубже с исходники забираться.

Спасибо Verg и Digitman за то что поделились опытом, теперь и у нас что-нибудь останется

Пиво куда приносить??? :)


 
slgeo   (2004-03-19 20:49) [54]

переустановка ОС не входит в планы (клиенты злые и неотзывчивые намечаются, причем территориально достаточно удаленные), поэтому обйдемся пока recv. Еще раз будем знать, что надо поглубже с исходники забираться.

Спасибо Verg и Digitman за то что поделились опытом, теперь и у нас что-нибудь останется

Пиво куда приносить??? :)


 
Verg ©   (2004-03-19 20:58) [55]

Мылом присылай :)

А зарегистрироавтья? Кто ты и откуда, парень? Давноль живешь?


 
Verg ©   (2004-03-19 20:58) [55]

Мылом присылай :)

А зарегистрироавтья? Кто ты и откуда, парень? Давноль живешь?



Страницы: 1 2 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.69 MB
Время: 0.04 c
3-1082021831
Manfred7
2004-04-15 13:37
2004.05.09
База на Acces. Как обеспечивать блокировку изменяемых записей?


7-1080071278
cyborg
2004-03-23 22:47
2004.05.09
Активация/Деактивация окна


4-1079892982
Yuri Btr
2004-03-21 21:16
2004.05.09
Оконная функция нового контрола


4-1079939092
BillyJeans
2004-03-22 10:04
2004.05.09
WM_HOTKEY и NumLock...


6-1079338820
alt7
2004-03-15 11:20
2004.05.09
Microsoft WNet праблем





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский