Главная страница
    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
3-23907
sniknik
2002-07-17 12:19
2002.08.08
Метод на обсуждение, рефреш датасета измененного копией программы


1-24108
Soler
2002-07-26 17:30
2002.08.08
Как создать Label


6-24157
Sherbacov
2002-05-29 15:39
2002.08.08
NMFTP1.Download (Все файлы)


6-24165
Secam
2002-05-26 21:38
2002.08.08
TwebBrowser событие OnBeforeNavigate2 проблема с PostData


3-23933
BS
2002-07-18 10:19
2002.08.08
Помогите не всегда работает ADO





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