Форум: "Сети";
Текущий архив: 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