Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2012, 17:35   #1
Denutrror
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 59
Радость TServerSocket, TClientSocket. Создание сокета для передачи файлов.

Сразу к делу:
Есть Сервер (TServerSocket) и несколько подключённых к нему клиентов (TClientSockets). Есть 2 массива один у клиента, а другой у сервера.(SSock: array[1..5] of TServerSocket у сервера, СSock: array[1..5] of TServerSocket у клиента).

Также есть массив SPort: array[1..10] of integer (Здесь прописаны порты. С 20401 по 20410 ).
Код:
var
I,b: integer;
begin
b:= 20400;
for i:= 20401 to 20410 do
begin
Sport[i-b]:= i;
b:= b +1;
end;
Вот в чём состоит задача:
1. Сервер посылает команду(Запрос файла. ('*$')).
2. Клиент получает команду и проверяет какой из портов (SPort) в данный момент "свободен". Найдя "свободный" порт он отсылает команду с номером выбранного порта Серверу.
3. Сервер, получив команду с номером порта, проверяет может ли он использовать этот порт, если порт "свободен", Сервер создаёт сокет из массива SSock, задаёт ему нужный порт и запускает его, после чего отсылает команду о готовности Клиенту.
4. Клиент получив эту команду создаёт сокет из массива CSock, задаёт ему нужный порт и подключается к Серверу, после чего начинается передача файла.

Массив сокетов нужен для одновременной передачи нескольких файлов.

Прошу извинять, если я спросил что-то неразумное, я только начинающий начинать программирование.

Помогите с реализацией. Заранее благодарен!
Denutrror вне форума Ответить с цитированием
Старый 31.05.2012, 18:32   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

зачем изобретать кривое колесо, возьмите TIdFTP
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 31.05.2012, 18:45   #3
Denutrror
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 59
По умолчанию

Цитата:
зачем изобретать кривое колесо, возьмите TIdFTP
Я никогда не работал с TIdFTP. Особо не знаю что это такое. Я начал с компонентов TServerSocket и TClientSocket, потому что они кажутся мне наиболее простыми. И к тому же я уже написал "львиную долю" программы. Но если это неоправданный труд, то дайте какую-нибудь информацию по этому компоненту, я попробую начать заново.
Denutrror вне форума Ответить с цитированием
Старый 31.05.2012, 19:14   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

нет, ну если задача в том, чтобы научиться программировать сокеты, то конечно лучше продолжать то, что уже есть (хотя я бы советовал отказаться от TServerSocket и TClientSocket и работать с сокетами напрямую, это гораздо проще и понятней).

А если задача в том, чтобы закончить проект в короткие сроки, то жмите F1 на TIdFTP, там всё подробно написано.

Цитата:
Клиент получает команду и проверяет какой из портов (SPort) в данный момент "свободен". Найдя "свободный" порт он отсылает команду с номером выбранного порта Серверу.
какой смысл клиенту решать за сервер, какой порт ему использовать. Сервер биндит сокет на первый свободный порт, и передаёт номер порта клиенту, вот и всё.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 03.06.2012, 09:59   #5
Denutrror
Пользователь
 
Регистрация: 18.08.2010
Сообщений: 59
По умолчанию

veniside, благодарю вас за совет. После того, как разберусь с поставленной задачей, во всех последующих проектах буду использовать TIdFTP.
Denutrror вне форума Ответить с цитированием
Старый 03.06.2012, 11:08   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> во всех последующих проектах буду использовать TIdFTP

нет, ну это будет тоже перебор )

Есть такой протокол, называется FTP, его придумали незадолго после смерти последненго динозавра. Он придуман именно для передачи файлов между сервером и клиентами. А потом придумали дельфи, а под неё сделали набор компонент для работы с популярными протоколами, называется indy. В него и входит компонент TIdFTP, который поднимает протокол FTP, который, имхо, хорошо подходит под вашу задачу.

Но это не значит, что очередную мморпг, голосовой чат или видеоконференцию тоже надо реализовывать на основе TIdFTP )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопотоковая передача файлов. С использование TServerSocket&TClientSocket Corbide C/C++ Сетевое программирование 0 10.02.2012 17:31
TClientSocket и TServerSocket _-Re@l-_ Работа с сетью в Delphi 2 29.11.2010 16:22
TServerSocket и TClientSocket grafgrial Общие вопросы Delphi 3 25.08.2010 15:15
Ошибки передачи файлов (TServerSocket -> TClientSocket) Cold_Night Работа с сетью в Delphi 2 26.11.2009 17:43
TServerSocket, TClientSocket prod87 Работа с сетью в Delphi 7 26.10.2009 22:38