![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кодинг сокетов юзая winsock в Дэлфи
lkj © (2003-11-07 13:45:00)
Я под компилю код, а он мне выдает ошыбку "Types of actual formal var parameters must be identical" на следущей строке:
NewSock:=Accept(Sock,@NewAddr,SizeOf(NewAddr));
Что неправильно? WSAStartUp сделал, socket, bind, listen, все есть
Вася Пупкин (2003-11-09 00:38:00) [1]
У меня тоже D6 - все компилируется без ошибок - код скопирован прямо из Delphi( проверялв D6 SP2, uses winsock)
Попробуй по-простому copy-paste и потом откомпилировать код, который я тебе дал - будут ли ошибки "Types of actual formal var parameters must be identical" . ИМХО, не должно быть.
ps Странно, что у тебя "ругалось" только на Accept, в приведенном коде в Bind тоже была ошибка.
lkj (2003-11-09 00:22:00) [2]
Я именно так и попробовал, всеравно та же ошибка =(
ЗЫ у мя Дэлфи6 (на всякий случай)
Вася Пупкин (2003-11-08 21:46:00) [3]
Брр... тебе же показали, где ошибка... -(
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-08 20:18:00) [4]
Не, не помагает, народ, вот сырец, где тут может быть ошибка?
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 17:05:00) [5]
упс.... только что обратил внимание -)
вот твоя ошибка:
SizeOf(NewAddr));
вместо этого заведи переменную AddrLen:integer и пиши примерно так:
NewSock:=Accept(Sock,@NewAddr,@AddrLen);
Вася Пупкин (2003-11-08 16:56:00) [6]
Версия 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.
lkj (2003-11-08 16:26:00) [7]
Все равно та же мессага
Вася Пупкин (2003-11-07 17:56:00) [8]
NewSock:=Accept(Sock,@NewAddr,SizeOf(NewAddr));
замени на
NewSock:=Accept(Sock,NewAddr,SizeOf(NewAddr));
скорее всего, дело именно в этом