|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.10.2007, 08:52 | #1 |
Форумчанин
Регистрация: 25.03.2007
Сообщений: 166
|
Снова idtcp
Как отправить файл от idtcpclient'a на idtcpserver?
|
03.10.2007, 09:55 | #2 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
Отправка:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread); var FileToSend: String; FileSize: Cardinal; p: Pointer; begin FileToSend := 'c:\MSDOS.SYS'; // тут файл, который мы рассылаем любому попросившему. with TFileStream.Create(FileToSend, fmOpenRead) do try FileToSend := ExtractFileName(FileToSend) + #00; GetMem(p, 256); try CopyMemory(p, @FileToSend[1], Length(FileToSend)); AThread.Connection.Socket.Send(p^, 256); finally FreeMem(p); end; FileSize := Size; AThread.Connection.Socket.Send(File Size, SizeOf(FileSize)); GetMem(p, Size); try ReadBuffer(p^, Size); AThread.Connection.Socket.Send(p^, Size); finally FreeMem(p); end; finally Free; end; AThread.Connection.Disconnect; ShowMessage('Послано'); end; Получение: procedure TForm1.IdTCPClient1Connected(Sender : TObject); var FileName: PChar; FileSize: Cardinal; FS: TFileStream; begin GetMem(FileName, 256); try IdTCPClient1.ReadBuffer(FileName^, 256); IdTCPClient1.ReadBuffer(FileSize, SizeOf(FileSize)); FS := TFileStream.Create('incoming\'+File Name, fmCreate); // тут создается файл, я его положил в каталог incoming try IdTCPClient1.ReadStream(FS, FileSize); finally FS.Free; end; finally FreeMem(FileName); end; ShowMessage('Принято'); end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
03.10.2007, 11:05 | #3 |
Форумчанин
Регистрация: 25.03.2007
Сообщений: 166
|
Спасибо Квэнди! Вот еще вопрос, как сделать чтобы сервер отправлял принятое сообщение(текст) от клиента, всем клиентам?
|
03.10.2007, 11:11 | #4 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
Соединение с клиентом создается только в момент получения от него сообщения, соединение не держится
Для каждого соединения создается отдельный поток, поэтому внутри него мы не знаем есть ли сейчас текущие активные соединения. Выход один: хранить где- то массив клиентов ( IP адреса) и по получении в цикле отправлять на эти адреса сообщения
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
03.10.2007, 11:32 | #5 | |
детский тренер
Форумчанин
Регистрация: 08.06.2007
Сообщений: 532
|
Цитата:
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
|
|
03.10.2007, 18:57 | #6 |
Форумчанин
Регистрация: 25.03.2007
Сообщений: 166
|
Вы не могли бы привести код. Заранее благодарен.
|
04.10.2007, 15:20 | #7 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
Какой именно код ?
в Onconnect на Tcpserver сохраняешь IP адрес клиента, который к тебе подсоединился, доступный в athread.Connection.Socket.Binding.P eerIP затем в onexecute идешь по массиву сохраненных ip адресов и отправляешь свое сообщение
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
10.05.2008, 15:31 | #8 |
Пользователь
Регистрация: 03.04.2008
Сообщений: 50
|
Квэнди, можно показать код отсылки файла по сохраненным ip адресам
и еще вопрос клиент автоматически подсоединяются к серверу т.е. запускаются программы и клиенты подсоединяются, сервер сохраняет в массив ip адреса и передает файл всем клиентам. заранее большое спасибо Последний раз редактировалось SeЯgey; 10.05.2008 в 16:11. |
11.05.2008, 02:06 | #9 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
проверяйте какой в AThread.Connection.Socket ip адрес и делайте вывод отправлять или нет.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
12.05.2008, 13:56 | #10 |
Пользователь
Регистрация: 03.04.2008
Сообщений: 50
|
можно еще вопрос. Передовать файлы в обе стороны возможно или необходимо на обе программы прописывать и клиента и сервер.
Если нет как передать от клиента к серверу? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Снова StringGrid | zzzzz | Компоненты Delphi | 2 | 13.07.2008 01:41 |
Снова о массиве | Constellation | Общие вопросы Delphi | 2 | 09.02.2008 20:42 |
И снова Chart | SunKnight | Общие вопросы Delphi | 5 | 08.02.2008 11:58 |
и снова Mdi | Баламут | Общие вопросы Delphi | 1 | 28.11.2006 07:03 |