Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
14-1088074044
infom
2004-06-24 14:47
2004.07.11
Кто какими компонентами в основном пользуется ?


1-1088175647
quQuev
2004-06-25 19:00
2004.07.11
Как сравнить две строки с учетом * и ?


3-1087391266
Ренат
2004-06-16 17:07
2004.07.11
Создание хп в MSSQL


14-1087541399
Layner
2004-06-18 10:49
2004.07.11
Что делает наша наука? НИИ?


14-1087469413
ПсихЪ
2004-06-17 14:50
2004.07.11
Предложение по модернизации форума





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский