Главная страница
    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.037 c
4-1085406294
menart
2004-05-24 17:44
2004.07.11
Проверка подлиности пароля и имя пользователя в домене!


8-1082823159
Namo
2004-04-24 20:12
2004.07.11
Delphi 8 + Flash


14-1087813050
tipman
2004-06-21 14:17
2004.07.11
Статические массивы в C#


4-1086117253
Шубин С.
2004-06-01 23:14
2004.07.11
BOTTOMMOST OKHO


6-1084383557
Dimaxx
2004-05-12 21:39
2004.07.11
Исходники для работы с Р2Р





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский