Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Отправка данных по сокету


Автор: Ak47black 15.4.2007, 16:16
Работаю с TCustomWinSocket и неполучаеться послать данные корректно.
Попробую описать проблему:
Хочю послать кусок файла с дополнительными параметрами, но что-бы размер всех этих отсылаемых данных в целом непревышал максимальный размер буфера 8192 байта.
Вот что я пытаюсь сделать
Код

const
  Max_buffer_size = 8192;

procedure CommandSendBackFileBlock(ID: Integer; RemoteFilename: String; Offset: Int64; Socket: TCustomWinSocket);
var
  SendBuffer: String;
  FileBuffer: array of Char;
  TempStream: TFileStream;
begin
  SendBuffer:= '$FileBlock';
  SendBuffer:= SendBuffer+'|'+IntToStr(ID)+'|'+RemoteFilename+'|'+IntToStr(Offset)+'|';
  SetLength(FileBuffer,Max_buffer_size-Length(SendBuffer));
  if not FileExists(RemoteFilename) then exit;
  try
    TempStream:= TFileStream.Create(RemoteFilename,fmOpenRead);
  except
    Exit;
  end;
  TempStream.Position:= Offset;
  TempStream.WriteBuffer(FileBuffer,Length(FileBuffer));// тутс ошибка
  SendBuffer:= SendBuffer+Pchar(FileBuffer);
  Socket.SendText(SendBuffer);
end;

Знаю что в неправельную сторону делаю ,но как-бы тут сделать правильно?

Автор: Хрипа 15.4.2007, 16:38
Ak47black, 
Чювак Юзай TClientSocket TServerSocket в делфи 7 в кладки интернет!
там отчем просто 
ServerSocket1.Port:=666;
ServerSocket1.Adress:='192.168.0.1';
ServerSocket1.Active:=True;
Все сервак готов принимать данные
ClientSocekt.Port
ClientSocekt.Adress
ClientSocekt.Active:=True; Подключились к серверу
ClientSocekt.Socket.connections[0].SendText(String);
--------------------------------------
Обработка сервером данных
В событие Получения данных
s:=Seocket.ReciveText;
if (s = 'Полученный текст') then begin Дейтсвия end;
Через этот сокет даже файлы передовать можна..
Очень удобная штука лучше чем Кустом Вин сокет

Автор: Ak47black 15.4.2007, 16:41
Хрипа, так это и есть TClientSocket.Socked или TServerSocket.Socked  smile , просто для удобства его в процедуру передаю.

Автор: MetalFan 15.4.2007, 19:40
try
TempStream:= TFileStream.Create(RemoteFilename,fmOpenRead); //открываешь на чтение
  except
    Exit;
  end;
  TempStream.Position:= Offset;
  TempStream.WriteBuffer(FileBuffer,Length(FileBuffer));// нахрена писать в файл, открытый для чтения?


з.ы. и вообще подход в корне неверный

Автор: Ak47black 15.4.2007, 19:42
MetalFan, я спутал моя вина,мне нужно сшитать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)