Текущий архив: 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