Вы используете:
function SendInt(S: TSocket; I: Integer): Integer;
begin
Result := send(S, PAnsiChar(I)^, Length(IntToStr(I)), 0);
end;
Второй параметр send()
является нетипизированным параметром const , что означает, что вы можете передать все, что имеет адрес, , но приведениецелое число к указателю, а затем разыменование это, безусловно, не правильно .
Вы можете просто сделать это:
begin
Result := send(S, I, SizeOf(I), 0);
end;
Хотя вам, возможно, придется изменить порядковый номер, используя htonl () :
begin
// I := htonl(I); ??
Result := send(S, I, SizeOf(I), 0);
end;
Вы должны попробовать обе альтернативы и посмотреть, что из этого получится.Один из них правильный.
Вы должны также передать целое число таким же образом, используя recv () .Возможно, вам придется использовать ntohl () (противоположно htonl () ) после вызова recv () :
function RecvInt(S: TSocket; var J: Integer): Integer;
begin
Result := recv(S, J, SizeOf(J), 0);
// J := ntohl(J); ??
end;