Текущий архив: 2004.03.28;
Скачать: CL | DM;
Вниз
Как максимально быстро передать поток по сети? Найти похожие ветки
← →
noname (2004-01-16 09:28) [0]Здраствуйте!
Нужен совет. Как максимально быстро передать поток по сети, чтобы задержка передачи и между передачей кадров потока была минимальной?
Размеры кадра порядка 10кб, частота 40мс (видеопоток).
Будет ли использование WinAPI наилучшим вариантом?
← →
Digitman © (2004-01-16 09:54) [1]сначала определись с сетью и сетевыми протоколами - на каких из них ты остановил свой выбор ? от этого многое зависит, а уж WinAPI или оболочу использовать - это далеко не определяющий критерий для решения задачи
← →
noname (2004-01-16 10:45) [2]Для начала хочу посмотреть сколько можно выжать из TCP/IP.
Этот вариант намного предпочтительнее исходя из условий задачи. Однако если не добьюсь желаемого результата придется переходить на протокол Ethernet.
Отсюда перефразирую вопрос - как максимально использовать протокол TCP/IP?
← →
Digitman © (2004-01-16 10:48) [3]речь идет об ЛВС или глоб.сети ?
← →
noname (2004-01-16 10:58) [4]ЛВС. Два компьютера. Он передает поток, другой принимает и посылает сервисные команды.
← →
Digitman © (2004-01-16 11:03) [5]Сеть Майкрософт ?
В таком случае неразумно использовать TCP
NetBIOS и базирующаяся на нем NamedPipe-технология будет ощутимо эффективней для решения такой задачи
пляши от ф-ций
CreateNamedPipe/ConnectNamedPipe/CallNamedPipe/TransactNamedPipe/ReadFile/WriteFile
← →
noname (2004-01-16 11:06) [6]Спасибо! Рассмотрю это предложение.
← →
Digitman © (2004-01-16 11:15) [7]
> noname
или на кр.случай - UDP
он проще в реализации и более производителен, нежели TCP, поскольку не предусматривает квитирования доставки пакетов
← →
noname (2004-01-16 13:04) [8]>Digitman
а есть примеры соединения с помощью NamedPipe по сети?
К сожалению все что мне удалось найти работает только локально как межпроцессорное взаимодействие.
← →
Digitman © (2004-01-16 13:16) [9]
> все что мне удалось найти
а что тебе удалось найти ? приведи код ... вероятно, проблемы с неверным заданием параметра, идентифицирующего имя пайпа (на стороне сервера и/или на стороне клиента)
формат строки, именующей пайп
на стороне сервера :
\\.\pipe\pipename
на стороне клиента :
\\servername\pipe\pipename
в хэлпе есть и комментарии на этот счет :
For example, if a client is running on the same machine as the server and uses the \\.\pipe\pipename format to open the pipe, the pipe is opened in byte mode by the named pipe file system (NPFS). If the client uses the form \\server\pipe\
pipename, the redirector opens the pipe in message mode. A byte mode pipe handle can be changed to message-read mode with the SetNamedPipeHandleState function.
← →
noname (2004-01-19 12:22) [10]> Digitman
Сервер:
ServerPipe: THandle;
ServerPipe:=CreateNamedPipe(pchar("\\.\pipe\pipe1"), PIPE_ACCESS_DUPLEX,PIPE_TYPE_MESSAGE or PIPE_NOWAIT,1, 256, 256, 100, nil);
if ServerPipe = INVALID_HANDLE_VALUE then begin
StatusBar1.Panels[0].Text:="Invalid Handle Value";
end else StatusBar1.Panels[0].Text:="Pipe created";
Клиент:
ClientPipe: THandle;
ClientPipe:=CreateFile(pchar("\\server\pipe\pipe1"),GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if ClientPipe = INVALID_HANDLE_VALUE then StatusBar1.Panels[0].Text:="Error creating pipe..."
else StatusBar1.Panels[0].Text:="Pipe created";
Код работает только на локальной машине.
Если запускать клиента с другой машины происходит ошибка.
Кажется я чего-то не догоняю...
← →
Digitman © (2004-01-19 12:30) [11]ServerPipe:=CreateNamedPipe(..);
Win32Check(ServerPipe <> INVALID_HANDLE_VALUE);
ClientPipe:=CreateFile(...);
Win32Check(Clientpipe <> INVALID_HANDLE_VALUE);
← →
noname (2004-01-19 17:54) [12]> Digitman
еще вопрос насчет потока от клиента серверу:
ServerPipe:=CreateNamedPipe(pchar("\\.\pipe\pipe1"),
PIPE_ACCESS_INBOUND,PIPE_TYPE_MESSAGE or PIPE_READMODE_MESSAGE or PIPE_WAIT,1, 256, 256, NMPWAIT_USE_DEFAULT_WAIT, nil);
и
ClientPipe:=CreateFile(pchar("\\server\pipe\pipe1"),GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
Не подскажите в чем здесь ошибка? Результат ACCESS_DENIDED по сети. В хелпах говорится что данная ошибка возникает когда не совпадают режимы доступа PIPE_ACCESS_INBOUND и GENERIC_WRITE а также количество экземпляторов (instances), а также при передачи по сети должен быть установлен режим PIPE_TYPE_MESSAGE..
По моему все условия соблюдены.. Или нет?
← →
Alex Konshin © (2004-01-20 00:48) [13]В моем примере http://home.earthlink.net/~akonshin/files/SQLAlert.zip (unit PipeController в директории Samples) можно подсмотреть один из путей работы с NamedPipes.
Страницы: 1 вся ветка
Текущий архив: 2004.03.28;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.025 c