Форум: "Сети";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизКодинг сокетов юзая winsock в Дэлфи Найти похожие ветки
← →
lkj (2003-11-07 13:45) [0]Я под компилю код, а он мне выдает ошыбку "Types of actual formal var parameters must be identical" на следущей строке:
NewSock:=Accept(Sock,@NewAddr,SizeOf(NewAddr));
Что неправильно? WSAStartUp сделал, socket, bind, listen, все есть
← →
Вася Пупкин (2003-11-07 17:56) [1]NewSock:=Accept(Sock,@NewAddr,SizeOf(NewAddr));
замени на
NewSock:=Accept(Sock,NewAddr,SizeOf(NewAddr));
скорее всего, дело именно в этом
← →
lkj (2003-11-08 16:26) [2]Все равно та же мессага
← →
Вася Пупкин (2003-11-08 16:56) [3]Версия Delphi ? что используешь (winsock или winsock2)?
Посмотри объявление Accept в соотв. модуле - могут быть варианты
winsock.pas D6:
function accept(s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket; stdcall;
winsock2.pas
function accept( const s: TSocket; var addr: TSockAddr; var addrlen: Integer ): TSocket; stdcall;
Проверь соответствие типов sock и NewAddr.
← →
Вася Пупкин (2003-11-08 17:05) [4]упс.... только что обратил внимание -)
вот твоя ошибка:
SizeOf(NewAddr));
вместо этого заведи переменную AddrLen:integer и пиши примерно так:
NewSock:=Accept(Sock,@NewAddr,@AddrLen);
← →
lkj (2003-11-08 20:18) [5]Не, не помагает, народ, вот сырец, где тут может быть ошибка?
var
Sock,NewSock:TSocket;
Addr,NewAddr:TSockAddr;
WSAData:TWSAData;
begin
WSAStartUp(MakeWord(2,0),WSAData);
Sock:=Socket(AF_INET,SOCK_STREAM,0);
Addr.sin_addr.s_addr:=INADDR_ANY;
Addr.sin_port:=htons(PORT);
Bind(Sock,@addr,SizeOf(Addr));
Listen(Sock,10);
repeat
NewSock:=Accept(Sock,@NewAddr,SizeOf(NewAddr));
...
CloseSocket(NewSock);
until PARAM;
ShutDown(Sock,2);
WSACleanUp;
end;
← →
Вася Пупкин (2003-11-08 21:46) [6]Брр... тебе же показали, где ошибка... -(
var
Sock,NewSock:TSocket;
Addr,NewAddr:TSockAddr;
WSAData:TWSAData;
AddrLen:integer;
begin
WSAStartUp(MakeWord(2,0),WSAData);
Sock:=Socket(AF_INET,SOCK_STREAM,0);
Addr.sin_addr.s_addr:=INADDR_ANY;
Addr.sin_port:=htons(4000);
Bind(Sock,addr,SizeOf(Addr));
Listen(Sock,10);
repeat
NewSock:=Accept(Sock,@NewAddr,@AddrLen);
...
← →
lkj (2003-11-09 00:22) [7]Я именно так и попробовал, всеравно та же ошибка =(
ЗЫ у мя Дэлфи6 (на всякий случай)
← →
Вася Пупкин (2003-11-09 00:38) [8]У меня тоже D6 - все компилируется без ошибок - код скопирован прямо из Delphi( проверял в D6 SP2, uses winsock)
Попробуй по-простому copy-paste и потом откомпилировать код, который я тебе дал - будут ли ошибки "Types of actual formal var parameters must be identical" . ИМХО, не должно быть.
ps Странно, что у тебя "ругалось" только на Accept, в приведенном коде в Bind тоже была ошибка.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c