Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
3-25237
Рамиль
2003-12-09 10:22
2004.01.09
Длинное целое


1-25326
Kirill_S
2003-12-22 16:02
2004.01.09
Сохранение списка файлов и подкаталогов в виде дерева


1-25432
AlexNx
2003-12-23 13:11
2004.01.09
Где взять русские XXConsts.pas для Delphi 7.0


1-25313
Seldon
2003-12-22 18:41
2004.01.09
Заморозить форму.


14-25529
JibSkeart
2003-12-19 12:01
2004.01.09
найти наибольших 2 элемента в 6 переменных не прибегая к массиву





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский