Форум: "Сети";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизСоздание простешего сокетного сервера! Помомгите начинающему! Найти похожие ветки
← →
Alexey8000 (2004-05-10 20:16) [0]Как создать такой сервер который например ожидет прихода 5 символов от клиента и потом "выплескивает" клиенту какую то соответсвующую информацию исходя из полученных данных?
Не поможите? Я не много просто запутался с блочно/неблочным примемом данных. Просто может много клиентов конектиться, а мне надо всех корректно обслужить. Помогите примером для подобной задачи! Заранее ОЧЕНЬ благодарен!!
← →
VMcL © (2004-05-10 21:21) [1]>>Alexey8000 (10.05.04 20:16)
Delphi?\Demos\Internet\Chat
Delphi?\Demos\Internet\NetChat
← →
хелп (2004-05-11 08:54) [2]Юзай компоненты "инди"
для клиента:
procedure TForm1.Button1Click(Sender: TObject);
var
a: string;
begin
idtcpclient1.Connect;
idtcpclient1.WriteLn("ля ля ля");
idtcpclient1.ReadLn(a)
end;
для сервера:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
a: string;
begin
AThread.Connection.ReadLn(a)
AThread.Connection.WriteLn("cool");
end;
← →
Alexey8000 (2004-05-11 19:14) [3]А спомощью не Инди, а КлиентСокет и СерверСокет? можно?
А в примерах что в демосе, там непонять как вот именно блочный вариант прогнать, чтоб 5 символов взять первых и поанализировать их и в ответ выбросить что либо на основании анализа.
Не поможите?
← →
Polevi © (2004-05-11 22:51) [4]там тоже самое, вместо ReadLn и WriteLn - ReceiveText и WriteText
и stThreadBlocking режим установить
← →
хелп (2004-05-11 23:47) [5]См в инди commandhandiers.
← →
Alexey8000 (2004-05-12 20:07) [6]to Polevi...
так если stThreadBlocking использовать то в каком обработчике событий компонента ServerSocket просматривать то ReceiveText и WriteText? Ведь OnRead и OnWrite тут уже не работают.
← →
Verg © (2004-05-12 21:04) [7]Про асинхронный режим сокетов, в смысле TClient(Server)Socket и передачу файлов можешь посмотреть http://webfile.ru/6840
← →
Rouse_ © (2004-05-12 21:35) [8]> [7] Verg © (12.05.04 21:04)
BUFF_SIZE = 65536; // Размер приемного буфера
ИМХО, не слишком оправдано...
← →
Verg © (2004-05-12 21:38) [9]
> [8] Rouse_ © (12.05.04 21:35)
По производительности принимающей сторны - процентов 20% дает по стравнени. с методом "вычерпывай все в OnRead".
← →
Rouse_ © (2004-05-12 21:47) [10]> [9] Verg © (12.05.04 21:38)
Я не про это вел речь - а о невозможности приема такого объема целиком в некоторых (но часто встречавшихся в моей практике) случаях...
← →
Verg © (2004-05-12 21:49) [11]
> [10] Rouse_ © (12.05.04 21:47)
> > [9] Verg © (12.05.04 21:38)
> Я не про это вел речь - а о невозможности приема такого
> объема целиком в некоторых (но часто встречавшихся в моей
> практике) случаях...
Хм..., извини, не очень понимаю о чем речь.
← →
Rouse_ © (2004-05-12 22:03) [12]Я про размер пакета...
Rcvd := ReceiveBuf(Buffer, Min(FDescriptor.Size, sizeof(Buffer)) );
просто не отработает правильно (точнее может отработать неправильно...)
← →
Verg © (2004-05-12 22:03) [13]Вообще, это "запас", просто. Никто там и не думал заставлять кого-то там принимать порции по 65к каждый раз, но при очень интенсивном обмене гиганского объема файлами при очень высокой произ-ти сетки наблюдалось существенное "улучшение временных показателей" при приближении размеров приемного буфера к этой величине (видимо к величние реального приемного буфера Winsock-SOCK_STREAM), по сравнению с другим спосбами увеличения произ-ти на асинхронных-оконных сокетах.
← →
Verg © (2004-05-12 22:08) [14]
> [12] Rouse_ © (12.05.04 22:03)
> Я про размер пакета...
> Rcvd := ReceiveBuf(Buffer, Min(FDescriptor.Size, sizeof(Buffer))
> );
> просто не отработает правильно (точнее может отработать
> неправильно...)
Например?
Что значит "неправильно"? Почему?
Что именно ты имеешь ввиду?
Не куда, неправильно?
← →
Rouse_ © (2004-05-12 22:31) [15]> [14] Verg © (12.05.04 22:08)
Попросту иногда у меня были ситуации когда recv с таким буфером возвращала WSAEMSGSIZE
← →
Rouse_ © (2004-05-12 22:33) [16]или WSAENOBUFS на Send
← →
Verg © (2004-05-13 06:23) [17]
> [15] Rouse_ © (12.05.04 22:31)
> > [14] Verg © (12.05.04 22:08)
> Попросту иногда у меня были ситуации когда recv с таким
> буфером возвращала WSAEMSGSIZE
Это при SOCK_STREAM-то?
← →
Rouse_ © (2004-05-13 09:08) [18]> [17] Verg © (13.05.04 06:23)
Опс, действительно :))
← →
Alexey8000 (2004-05-15 17:34) [19]А как например только 5 символов заставить сервер принимать а остальное отсекать как мусор? ну соответсвенно м.б. много клиентов что конектяться и со всеми соответственно разбираться.
А если делать это посимвольно используя OnRead и OnWrite то как?
← →
Rouse_ © (2004-05-15 21:16) [20]Принимаешь 5 байт остальные не учитываешь - заставить можно только если сам шлешь, иначе принудительно начинаешь искать себе на голову геморрой - ибо (если я правильно понял) сервер без знаний азов писать не стоит...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.035 c