Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.052 c
1-1087995689
MetalFan
2004-06-23 17:01
2004.07.11
Хранение данных в EXE...


1-1088554460
Alexey Leonchik
2004-06-30 04:14
2004.07.11
Список открытых окон в меню (MDI)


1-1088374858
a[x]el
2004-06-28 02:20
2004.07.11
!= Работа с памятью StarCraft:BW=!


9-1079371772
Юрий Ж.
2004-03-15 20:29
2004.07.11
Что лучше DirectX или OpenGL?


1-1088605916
zep
2004-06-30 18:31
2004.07.11
StringGrid