Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];

Вниз

функция accept() в WinSock Api   Найти похожие ветки 

 
Mir   (2002-05-23 03:38) [0]

Подскажите, какие параметры надо вставить в функцию accept в WInSock Api. Кто знает где можно скачать "официальный" Winsock2 для Delphi ?

var
S:TSocket;
ID:WSADATA;
AErrorCode:integer;
TCPaddr:TSockAddrIN;

Begin
if WSAStartup(makeword(1,1),id)<>0 then
begin
AErrorCode := WSAGetLastError;
Memo_info.Lines.Add("ERROR №"+inttostr(AErrorCode)+": Ошибка при инициализации Winsock2");
exit;
end;
Memo_info.Lines.Add("Инициализация WinSock прошла успешно.");
S := Socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
If S = INVALID_SOCKET then
begin
AErrorCode := WSAGetLastError;
Memo_info.Lines.Add("ERROR №"+inttostr(AErrorCode)+": Ошибка при создании сокета");
exit;
end;
Memo_info.Lines.Add("Создание сокета прошло успешно.");

bind(s,TCPaddr,SizeOf(TCPaddr));
listen(S,1);
accept(s, какие параметры сюда надо в ставить?);
// <-// // // //
...
//-> // // // //

WSACleanup();
end;


 
KaPaT   (2002-05-23 03:42) [1]

а в хелпе глядел?

SOCKET accept (

SOCKET s,
struct sockaddr FAR* addr,
int FAR* addrlen
);
Parameters

s

[in] A descriptor identifying a socket which is listening for connections after a listen.

addr

[out] An optional pointer to a buffer which receives the address of the connecting entity, as known to the communications layer. The exact format of the addr argument is determined by the address family established when the socket was created.

addrlen

[out] An optional pointer to an integer which contains the length of the address addr.


 
Digitman   (2002-05-23 09:09) [2]

>Mir
accept() должен (причем необязательно) вызываеться асинхронно в контексте реакции сервера на событие FD_ACCEPT, т.е. в обработчике события, возникшего в следствие получения сервером РЕАЛЬНОГО кл.запроса на коннект. У тебя же accept() вызывается синхронно, и совершенно непонятно - зачем.


 
Mir   (2002-05-24 10:10) [3]

>Digitman
Можешь объяснить по понятнее.
Что не хватает в коде и где. Я впервые использую WinSock API, по этому многое не знаю. Мне нужно сделать чат, либо программу для пересылки файлов.


 
Mir   (2002-05-24 10:23) [4]

>Digitman
Я уже задавал вопрос про функцию TransmitFile на форуме, но не получил никакого ответа.
Нашел только пример на С, но как его использовать под Delphi?
Bool TransmiteFile (
Socket hSocket,
HANDLE hFile,
DWORD nNumberofBytesToWrite,
DWORD nNumberofBytesPerSend,
LPOVERLAPPED ipOvrelapped,
LPTRANSMITE_FILE_BUFFERS ipTransmiteBuffers,
Dword dwFlags
);




 
Digitman   (2002-05-24 12:25) [5]

>Mir

1. В коде многого чего не хватает, если ты планируешь реализовать сервер, работающий в неблокирующем режиме. Если же достаточно блокирующего режима, то код, конечно же, заметно упрощается, но при этом будет масса ограничений в функц-ти сервера и его клиентов. Чтобы хоть сколь-либо детальней ответить на твой вопрос, нужно знать следующее :
- сколько клиентов (максимум) должен обслуживать твой сервер одновременно;
- должен ли сервер обрабатывать поступающие клиентские запросы одновременно (параллельно) либо допускается последовательная обработка запросов (в порядке их поступления - "первым запросил - первым будешь обслужен");
- должен ли сервер что-то делать еще, кроме обработки кл.запросов, например : вести лог, выполнять асинхронную широковещательную рассылку сообщений о событиях и пр;

Кстати, а почему ты хочешь выполнить сервер непосредственно используя WinsockAPI ? Почему не используешь готовые компоненты ? Чем это обосновано либо что не устраивает в станд.компонентах ?

2. Что сие значит - "как использовать в Delphi" TransmitFile() ? Если тебе непонятны назначение каких-то параметров вызова - это одно. Если непонятна сама концепция хэндлов объектов в ОС - другое. Если же не знаешь паскаль-эквивалентов C-типов - третье. Уточни, что тебе конкретно непонятно.


 
Drakan   (2002-05-24 16:11) [6]

>Mir
Вроде так:
function Transmitefile(hsocket: TCustomWinSocket,
hfile: THandle,
nNumberofBytesToWrite: longword,
nNumberofBytesPerSend: longword,
LPOVERLAPPED ipOvrelapped, / здесь я не в курсе
LPTRANSMITE_FILE_BUFFERS ipTransmiteBuffers, / здесь тоже
dwFlags: longword
);


 
Mir   (2002-05-26 14:39) [7]

>Digitman

I. Я не использую стандартные компоненты, потому что у меня курсовая по WinSock API. Текстовый вариант я уже сделал, а вот с программой у меня БОЛЬШИЕ проблемы. Научный руководитель по курсовой сам не знает WinSock API, то этому я и обратился на форум.

1) сервер должен обслуживать 1 клиента (в последствии я хочу сделать что-то типа HyperTerminal)
2) последовательная обработка запросов (FIFO)
3) сервер\клиент должен только отсылать фаил или группу файлов. (в будующем может пригодится чат, чтобы было чем заняться во время пересылки файлов, но если он существенно усложнит код, то он не нужен)

II. Я прочитал, что функция TransmitFile осуществляет чтение и отправку в режиме ядра. Возможно пересылка файлов будет быстрее.
Но что нужно для использования этой функции. Я не знаю паскаль-эквивалентов C-типов.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
1-24048
Tatan
2002-07-25 18:18
2002.08.08
B-дерево


4-24286
Andrew_K
2002-05-31 10:20
2002.08.08
CreateProcess


1-24054
psibug
2002-07-18 21:31
2002.08.08
---|Ветка была без названия|---


7-24256
Посетитель
2002-05-24 14:52
2002.08.08
Как приостановить Shutdown компа


1-24038
zetta
2002-07-25 14:51
2002.08.08
а можно ли так:





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский