![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| BigTon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Мужики, недавно видел на форуме подобную проблему, но вот даже поиком искал не помогло, не могу найти и всё...
при особождении потока ошибка выскакивает и всё...а там где я читал было написано как подругому освобождать... И второй ламерский вопросик: вот допустим клиент получил что хотел от сервера и передавать серверу будет ну как минимум через 30 минут результаты работы. Разорвётся ли за это время соединение? Надо ли его самому разрывать, а потом через 30 минут снова востанавливать?! как правильно вообще?!! И третий....: на сервере пишу в tmemorystream несколько картинок, отправляю поток, как на клиенте восстановить из потока картики? Позиции tmemorystream после записи в него каждой картинки я сохраняю и тоже передаю клиенту, как это используя воостановить изображения??? |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
мда. один вопрос - одна тема.
по этому вопросу - где создается MemoryStream? -------------------- There are always someone smarter than you... |
|||
|
||||
| BigTon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
В ServerSocket1ClientRead. То есть приходит запрос на данные, я создаю поток, кидаю туда данные и хочу освободить поток, что для следующего запроса сформировать поток уже из других данных.
|
|||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 9 Всего: 38 |
Ну так покажи полностью код!!! Из того, что ты привет, Metalfan правильно сказал - ошибка в том, что Stream не создается... -------------------- ![]() |
|||
|
||||
| BigTon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Пожалуйста
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Ну и где у тебя объявление t?
Она у тебя что, глобальная? Срочно переделывай на локальную! Добавлено через 5 минут и 12 секунд И что это за нелепая конструкция: serversocket1.Socket.Connections[0] Тебе в функцию уже передали нужный Socket - с ним и работай. |
|||
|
||||
| BigTon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Да, глобальная, учту замечание. А вообще я выяснил что в случае удачной отправки TMemoryStream сам освобождается, а освобождать его самому надо только в случае неудачной отправки...вот.
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Освобождать нужно всегда!
А чудеса в твоём случае вызваны именно глобальностью. |
|||
|
||||
| GoingOnward |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 18.4.2007 Репутация: нет Всего: нет |
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket); var a,b,vv:string; ssss:array[1..10]of string; ba,i:integer; SRCL : TMemoryStream; begin a:=serversocket1.Socket.Connections[0].ReceiveText; b:=copy(a,0,4); if b='0100' then serversocket1.Socket.Connections[0].SendText('0002'+'/'+edit3.Text); if b='0200' then begin SRCL := TMemoryStream.Create; Try ba:=strtoint(edit3.Text); i:=1; if ba>0 then begin advpicture2.Picture.SaveToStream(SRCL); ssss[i]:=inttostr(SRCL.Position); i:=i+1; end; if ba>1 then begin advpicture1.Picture.SaveToStream(SRCL); ssss[i]:=inttostr(SRCL.Position); i:=i+1; end; if ba>2 then begin advpicture3.Picture.SaveToStream(SRCL); ssss[i]:=inttostr(SRCL.Position); i:=i+1; end; if ba>3 then begin advpicture4.Picture.SaveToStream(SRCL); ssss[i]:=inttostr(SRCL.Position); i:=i+1; end; if ba>4 then begin advpicture5.Picture.SaveToStream(SRCL); ssss[i]:=inttostr(SRCL.Position); i:=i+1; end; SRCL.Position:=0; for i:=1 to strtoint(edit3.Text) do vv:=vv+ssss[i]+'('+inttostr(i)+')'; serversocket1.Socket.Connections[0].SendText('0003'+'/'+vv+'0004'); serversocket1.Socket.Connections[0].SendStream(SRCL); serversocket1.Socket.Connections[0].SendText('0005'); finally SRCL.Free; End; end; if b='0300' then begin serversocket1.Socket.Disconnect(0); Edit2.Text:='diskonekt'; end; end; Где-то так мож я там чёто пропустил я в тект редакторе правил ... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |