|
Вопрос # 5 227/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Как сделать мультипоточность с сервером, чтобы клиент открывал множество соединений для звязи с одним портом сервера + в интерфейсе программы клиента должна быть настройка выбора Thread число соединений и start, stop.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Winsock2, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
-
- type
- TForm1 = class(TForm)
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
-
- var Server:TInaddr;
- inf: TWSADATA;
- socks: integer;
- sockaddr: TSockAddr;
- s: array[0..100] of Char;
-
- begin
- Server.s_addr:=inet_addr(PChar('127.0.0.1'));
- WSAStartup(MAKEWORD(2,0),inf);
- socks:=socket(AF_INET,SOCK_STREAM,0);
- sockaddr.sin_family := AF_INET;
- sockaddr.sin_port := htons(210);
- sockaddr.sin_addr := Server;
- connect(socks,@sockaddr,sizeof(sockaddr));
- begin s:='Hello';
- if connect(socks,@sockaddr,sizeof(sockaddr))<>-1 then
- begin
- send(socks,s,Length(s),0);
- end;
-
- end;
- end.
-
-
 |
Вопрос задал: Father (статус: Посетитель)
Вопрос отправлен: 26 апреля 2011, 08:32
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Father!
Есть много вариантов, как написать подобный сервер. Если клиентов будет немного (несколько сотен одновременно, все зависит от настроек) и они будут в основном "тяжелые", то лучше использовать методику "один клиент-один тред" (кстати, так работает Apache). Почитать о примере использования можно тут http://www.realcoding.net/articles/programmirovanie-soketov-v-delphi-s-ispolzovaniem-windows-socket-api.html
Если же клиентов будет много (но не более 1024 подключившихся одновременно), то можно использовать select и все сделать в одном треде. Либо сделать несколько рабочих тредов и распределять между ними. Если же клиентов будет больше (я все ещё говорю об одновременных подключениях) - то лучше смотреть в сторону Poll и IOCP.
Посмотрите пример, погуглите на тему select и poll, а там будет понятнее, что хочется. А может просто использовать IdTCPServer, который уже сам создает по треду на каждое подключение и вполне может реализовать все Ваши желания.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 26 апреля 2011, 10:47
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|