Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Вниз

Работа с файлами по локальной сети   Найти похожие ветки 

 
dmitrlast ©   (2006-05-08 10:50) [0]

Уважаемые господа! Отправляю файл по сети (сервер и клиент на одной машине), клиент тут же отвечает, что не найден файл (имя). Если же такой файл (пустой) создан заранее, то он клиентом не перезаписывается. Использую Stream. Если можно, дайте пример.

Хотя, в идеале, пересылаемый сервером файл - библиотека, хотелось бы ее просто клиентом запустить.

Заранее спасибо.


 
Virgo_Style ©   (2006-05-08 13:07) [1]

У тебя ошибка в программе. (с)

И ты ее нам не показываешь.


 
dmitrlast ©   (2006-05-08 16:01) [2]

Для сервера я пишу так:
procedure TFormServer.ElPopupButton2Click(Sender: TObject);
var
 s: string;
 i: integer;
 name_file_test: string;
 srcfile: TFileStream;
begin
 FormServer.Memo1.Lines.Add("Дано разрешение на запуск теста клиенту: " + datamodule1.Table4NameClient.AsString + "...");
 s := "#O";
 s := s + "Разрешение дано, ждите запуска теста...";
 i := datamodule1.Table4Number.AsInteger - 1;
 ServerSocket1.Socket.Connections[i].SendText(s);
 datamodule1.Table1.First;
 while not datamodule1.Table1.Eof do
   begin
     if datamodule1.Table1Opisanie.AsString = datamodule1.Table4Zapros.AsString then
       begin
         name_file_test := datamodule1.Table1ModulTest.AsString;
         abort;
       end;
     datamodule1.Table1.Next;
   end;
 srcfile := TFileStream.Create (name_file_test, fmOpenRead);
 FormServer.ServerSocket1.Socket.Connections [i].SendStream(srcfile);
 srcfile.Free;  
end;

Для клиента:
procedure TFormClient.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 s: string;
 l: integer;
 buf: Pchar;
 src: TFileStream;
begin
 if Copy(s, 1, 2) = "#O" then
   begin
     FormClient.Memo1.Lines.Add("Получен ответ на запрос о прохождении теста...");
     Delete(s, 1, 2);
     ClientSocket1.Socket.SendText(s);
     FormClient.Memo1.Lines.Add(s);
     l := FormClient.ClientSocket1.Socket.ReceiveLength;
     GetMem (buf, l + 1);
     FormClient.ClientSocket1.Socket.ReceiveBuf(buf, l);
     src := TFileStream.Create("Test.stk", fmOpenReadWrite);
     src.Seek (0, soFromEnd);
     src.WriteBuffer(buf, l);
     src.Free;
     FreeMem (buf);
   end;
end;

Клиент должен дождаться разрешения сервера пройти тест, затем сервер пересылает ему файл теста.


 
Slym ©   (2006-05-10 06:21) [3]

Первая ошибка: НЕТ ПРОТОКОЛА ОБМЕНА!

2. FormServer.ServerSocket1.Socket.Connections [i].SendStream(srcfile);
srcfile.Free; это лишнее, SendStream сам освобождает srcfile

3. ReceiveLength - это ты так размер принимаегого файла узнаешь?
нет! это всего лишь размер данных которые готовы с считыванию, а это может быть только часть необходимого.

dmitrlast ©   (08.05.06 16:01) [2]
FormClient.Memo1.Lines.Add("Получен ответ на запрос о прохождении теста...");
Delete(s, 1, 2);
ClientSocket1.Socket.SendText(s); может всетаки ReceiveText?
FormClient.Memo1.Lines.Add(s);

если всетаки ReceiveText- то ты полный Ступид
Кто тебе сказал что данные посланные оператором SendText обязательно будут приняты командой ReceiveText так как ты хочешь?
Последовательность команд:
SendText("Text")
SendStream("This is Stream")
может привести к такому:
ReceiveText("TextThis")
ReceiveBuf(" is Stream")
или к такому
ReceiveText("TextThis is Stream")
ReceiveBuf("")
или даже к такому
ReceiveText("Te")
ReceiveBuf("xtThi")
ReceiveBuf("s is St")
ReceiveBuf("ream")
что будет особенно часто наблюдаться в боевых испытаниях



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.014 c
2-1157707741
vodvorezlaya
2006-09-08 13:29
2006.10.01
Вопрос по Database Desktop


1-1155860315
DDDeN
2006-08-18 04:18
2006.10.01
Сделать снимок раб. стола


3-1153897920
Zouch
2006-07-26 11:12
2006.10.01
Диалог на подключение к БД


2-1157907446
_Гость_
2006-09-10 20:57
2006.10.01
Промогите решить проблему


2-1157374144
parovoZZ
2006-09-04 16:49
2006.10.01
Когда много панелей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский