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

Вниз

Кодинг сокетов юзая 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
14-25606
Style
2003-12-17 10:36
2004.01.09
Наша жизнь похожа на зебру не правда ли?


1-25342
Dmitriy_R
2003-12-22 12:57
2004.01.09
Потоки и соккеты


7-25623
Jedi
2003-10-09 16:10
2004.01.09
Доступ к HDD используя LBA


1-25284
tria
2003-12-22 18:23
2004.01.09
Можно ли убрать свойство, кот. не нужно?


14-25558
lipskiy
2003-12-15 02:04
2004.01.09
Эмулятор принтера?