Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание простешего сокетного сервера! Помомгите начинающему!


Alexey8000 ©   (2004-05-10 20:16:00) 

Как создать такой сервер который например ожидет прихода 5 символов от клиента и потом "выплескивает" клиенту какую то соответсвующую информацию исходя из полученных данных?
Не поможите? Я не много просто запутался с блочно/неблочным примемом данных. Просто может много клиентов конектиться, а мне надо всех корректно обслужить. Помогите примером для подобной задачи! Заранее ОЧЕНЬ благодарен!!


Rouse_   (2004-05-15 21:16:00) [1]

Принимаешь 5 байт остальные не учитываешь - заставить можно только если сам шлешь, иначе принудительно начинаешь искать себе на голову геморрой - ибо (если я правильно понял) сервер без знаний азов писать не стоит...


Alexey8000   (2004-05-15 17:34:00) [2]

А как например только 5 символов заставить сервер принимать а остальное отсекать как мусор? ну соответсвенно м.б. много клиентов что конектяться и со всеми соответственно разбираться.
А если делать это посимвольно используя OnRead и OnWrite то как?


Rouse_   (2004-05-13 09:08:00) [3]

> [17] Verg ©   (13.05.04 06:23)
Опс, действительно :))


Verg   (2004-05-13 06:23:00) [4]


> [15] Rouse_ ©   (12.05.04 22:31)
> > [14] Verg ©   (12.05.04 22:08)
> Попросту иногда у меня были ситуации когда recv с таким
> буфером возвращала WSAEMSGSIZE


Это при SOCK_STREAM-то?


Rouse_   (2004-05-12 22:33:00) [5]

или WSAENOBUFS на Send


Rouse_   (2004-05-12 22:31:00) [6]

> [14] Verg ©   (12.05.04 22:08)
Попросту иногда у меня были ситуации когда recv с таким буфером возвращала WSAEMSGSIZE


Verg   (2004-05-12 22:08:00) [7]


> [12] Rouse_ ©   (12.05.04 22:03)
> Я про размер пакета...
> Rcvd := ReceiveBuf(Buffer, Min(FDescriptor.Size, sizeof(Buffer))
> );
> просто не отработает правильно (точнее может отработать
> неправильно...)


Например?
Что значит "неправильно"? Почему?
Что именно ты имеешь ввиду?
Не куда, неправильно?


Verg   (2004-05-12 22:03:00) [8]

Вообще, это "запас", просто. Никто там и не думал заставлять кого-то там принимать порции по 65к каждый раз, но при очень интенсивном обмене гиганского объема файлами при очень высокой произ-ти сетки наблюдалось существенное "улучшение временных показателей" при приближении размеров приемного буфера к этой величине (видимо к величние реального приемного буфера Winsock-SOCK_STREAM), по сравнению с другим спосбами увеличения произ-ти на асинхронных-оконных сокетах.


Rouse_   (2004-05-12 22:03:00) [9]

Я про размер пакета...
Rcvd := ReceiveBuf(Buffer, Min(FDescriptor.Size, sizeof(Buffer)) );
просто не отработает правильно (точнее может отработать неправильно...)


Verg   (2004-05-12 21:49:00) [10]


> [10] Rouse_ ©   (12.05.04 21:47)
> > [9] Verg ©   (12.05.04 21:38)
> Я не про это вел речь - а о невозможности приема такого
> объема целиком в некоторых (но часто встречавшихся в моей
> практике) случаях...


Хм..., извини, не очень понимаю о чем речь.


Rouse_   (2004-05-12 21:47:00) [11]

> [9] Verg ©   (12.05.04 21:38)
Я не про это вел речь - а о невозможности приема такого объема целиком в некоторых (но часто встречавшихся в моей практике) случаях...


Verg   (2004-05-12 21:38:00) [12]


>  [8] Rouse_ ©   (12.05.04 21:35)


По производительности принимающей сторны - процентов 20% дает по стравнени. с методом "вычерпывай все в OnRead".


Rouse_   (2004-05-12 21:35:00) [13]

> [7] Verg ©   (12.05.04 21:04)
BUFF_SIZE            = 65536; // Размер приемного буфера

ИМХО, не слишком оправдано...


Verg   (2004-05-12 21:04:00) [14]

Про асинхронный режим сокетов, в смысле TClient(Server)Socket и передачу файлов можешь посмотреть http://webfile.ru/6840


Alexey8000   (2004-05-12 20:07:00) [15]

to Polevi...

так если stThreadBlocking использовать то в каком обработчике событий компонента ServerSocket просматривать то ReceiveText и WriteText? Ведь OnRead и OnWrite тут уже не работают.


хелп   (2004-05-11 23:47:00) [16]

См в инди commandhandiers.


Polevi   (2004-05-11 22:51:00) [17]

там тоже самое, вместо ReadLn и WriteLn - ReceiveText и WriteText
и stThreadBlocking режим установить


Alexey8000   (2004-05-11 19:14:00) [18]

А спомощью не Инди, а КлиентСокет и СерверСокет? можно?

А в примерах что в демосе, там непонять как вот именно блочный вариант прогнать, чтоб 5 символов взять первых и поанализировать их и в ответ выбросить что либо на основании анализа.

Не поможите?


хелп   (2004-05-11 08:54:00) [19]

Юзай компоненты "инди"
для клиента:
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;


VMcL   (2004-05-10 21:21:00) [20]

>>Alexey8000  (10.05.04 20:16)

Delphi?\Demos\Internet\Chat
Delphi?\Demos\Internet\NetChat


Наверх

Титульная страница Поиск, карта сайта Написать письмо