|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.08.2008, 00:33 | #1 |
Форумчанин
Регистрация: 22.11.2007
Сообщений: 224
|
Передача потока. TServer\ClientSocket
Передача текста (клиент->сервер) проходит отлично.
Пытаюсь перебросить картинку(TMemoryStream). Перебрасываю с TServerSocket на TClientSocket. Так отправляю: Код:
Код:
Программа-сервер просто вылетает. Как с этим бороться? |
10.08.2008, 09:56 | #2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Поток не нужно уничтожать. Он будет уничтожен сокетом после отправки.
serversocket1.Socket.Connections[0].SendStream(fs); //fs.Destroy; //По-моему уже был такой вопрос. |
10.08.2008, 10:20 | #3 |
Форумчанин
Регистрация: 22.11.2007
Сообщений: 224
|
Проблема не решена. Та же самая ошибка
|
10.08.2008, 11:46 | #4 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
По-моему проблема с getMem и pChar.
Лучше pointer и вот так: L := socket.ReceiveBuf(buf^, L); fs.WriteBuffer(buf^, L); На всякий случай весь проект: Код:
|
10.08.2008, 11:59 | #5 |
Форумчанин
Регистрация: 22.11.2007
Сообщений: 224
|
Спасибо, проблема решена.
Но теперь появилась другая проблема-- ошибка Bitmap image is not valid. Есть варианты решения? |
10.08.2008, 12:09 | #6 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
fs.WriteBuffer(buf^, L); Проверьте еще раз. Код, который я привел, рабочий. --------------------------- Есть еще один момент. Я использовал для теста BitMap 406 байт. Если поток большой, сервер запросто может разбить его на несколько пакетов. Проверьте количество вызовов OnRead (закоментируйте преобразование в BitMap и повесьте счетчик.). По-хорошему нужно бы сначала принять размер потока, потом все части и только когда поток принят полностью, преобразовывать его в BitMap. Последний раз редактировалось alexBlack; 10.08.2008 в 12:31. |
|
10.08.2008, 12:29 | #7 |
Форумчанин
Регистрация: 22.11.2007
Сообщений: 224
|
Кажется, я понял где "ошибка".
Ваш код полностью рабочий, но я не учёл 1 момент--картинка, похоже, передаётся не целиком, а по частям.(первый раз работаю с сокетами)Что мне и непонятно--видел несколько исходников, в которых это никак не предусматривалось--и всё работало. Пересылка идёт по 8,2 кб. Как с этим бороться? Последний раз редактировалось NikLik; 10.08.2008 в 14:06. |
10.08.2008, 20:12 | #8 |
Форумчанин
Регистрация: 25.03.2007
Сообщений: 166
|
А тебе именно TServer\ClientSocket надо? Я передавал картинку через Indy компоненты, там это проще.
|
10.08.2008, 21:16 | #9 |
Форумчанин
Регистрация: 22.11.2007
Сообщений: 224
|
Всем ещё раз спасибо, разобрался.
Выкладываю то, что получилось-- небольшая тулза(клиент-сервер)(считай--бэкдор), способная выполнять простейшие команды+ давать скриншот. |
17.05.2013, 15:12 | #10 |
Регистрация: 04.06.2009
Сообщений: 6
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Serversocket,clientsocket | prizrak1390 | Работа с сетью в Delphi | 10 | 21.04.2009 16:04 |
Работа с ServerSocket и ClientSocket | AlDelta | Работа с сетью в Delphi | 12 | 28.09.2008 11:18 |
Компонент ClientSocket | Altera | Компоненты Delphi | 2 | 03.04.2008 15:37 |
Server & ClientSocket как без ip | delphin100 | Работа с сетью в Delphi | 20 | 16.01.2008 17:12 |
Client Server Socket передача информации с помощью потока | One.Love | Работа с сетью в Delphi | 4 | 15.01.2008 19:06 |