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

Вниз

И опять эти сокеты...   Найти похожие ветки 

 
Vampire   (2003-02-18 05:47) [0]

Блин...eсть такой исходник...

Клиент:

unit client;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Bevel1: TBevel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
reciving: boolean;
datasize: integer;
data: tmemorystream;

public
{ Public declarations }
end;

var
Form1: TForm1;
dat: tmemorystream;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Active:=true;

end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText("send");

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);

var s,sl: string;
begin
s:=socket.ReceiveText;
if not Reciving then
begin
SetLength(sl,strlen(pchar(s))+1);
strlcopy(@sl[1],pchar(s), length(sl)-1);
datasize:=strToint(sl);
data:=TMemoryStream.create;
delete(s,1,length(sl));
reciving:=true;
end;
try
data.write(s[1],length(s));
if data.size =datasize then
begin
dat:=tmemorystream.Create;
data.position:=0;
dat.LoadFromStream(data);
dat.SaveToFile("c:\999.mp3");
data.free;
reciving:=false;
socket.Close;
end;
except
data.free;
end;
end;

end.


Сервер:
unit client;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Bevel1: TBevel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
reciving: boolean;
datasize: integer;
data: tmemorystream;

public
{ Public declarations }
end;

var
Form1: TForm1;
dat: tmemorystream;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Active:=true;

end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText("send");

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);

var s,sl: string;
begin
s:=socket.ReceiveText;
if not Reciving then
begin
SetLength(sl,strlen(pchar(s))+1);
strlcopy(@sl[1],pchar(s), length(sl)-1);
datasize:=strToint(sl);
data:=TMemoryStream.create;
delete(s,1,length(sl));
reciving:=true;
end;
try
data.write(s[1],length(s));
if data.size =datasize then
begin
dat:=tmemorystream.Create;
data.position:=0;
dat.LoadFromStream(data);
dat.SaveToFile("c:\999.mp3");
data.free;
reciving:=false;
socket.Close;
end;
except
data.free;
end;
end;

end.



--------------------------
Файлы до 5мб летят не заметно быстро...
Но хочется качать и 20 и 100 метров :)
ТОлько после 5мб выдается ошибка или приложение зависает...
ВОт так...
ТИпа нехватает памяти или что-то в этом роде...
Как можно устронить???
И как можно при отправке резать файлы на куски и передавать?
Может кто приведет пример глядя на этот исходник?


 
Digitman   (2003-02-18 08:57) [1]

где-то этот примитив я уже видел) ..
Не будет это работать как положено ! Код полностью переделывать нужно. Фактически, "камня на камне" не останется после "переделки"

Да, как минимум следует резать файл на "куски" и обрабатывать событие OnWrite()


 
Vampire   (2003-02-18 09:23) [2]

Digitman ©
НУ может что посоветуешь? :)
Это понятно что на куски :) тока как? И если ли где пример использывания OnWrite? ...Именно его :)


 
Digitman   (2003-02-18 09:29) [3]

А почитать для начала ? Ну хотя бы - описание ф-ции SendText() ! Ведь это - ф-ция ! И она возвращает опред.результат, в зависимости от которого нужно предпринимать те или иные дальн.действия


 
Vampire   (2003-02-18 10:00) [4]

Digitman
Ты хочешь сказать что событие OnRead() вообще использывать не хорошо? т.е. событием OnRead() я не смогу перекачать большой файл? Мы же в этом исходнике описыаем размер потока, может его просто разбить и слать частями...так можно?


 
Digitman   (2003-02-18 10:40) [5]


> Ты хочешь сказать что событие OnRead() вообще использывать
> не хорошо?


При чем здесь OnRead() ? Это - событие приемника сообщения
А я - о передатчике сообщения тебе говорю. До приемника еще - как до Китая))..
Я хочу сказать, что в неблок.режиме без анализа результатов вызовов send-методов и обработки событий OnWrite() (необходимость обработки зависит ИМЕННО от результатов вызова send-метода) перередатчик как положено работать не будет - потери фрагментов в ходе интенсивных пересылок больших потоков данных тебе обеспечены.

Брось свой SendText (хэлп на него некорректен), вчитайся внимательно в SendBuf() и пользуй его в соответствии с описанием ф-ции


 
Fredericco   (2003-02-18 12:09) [6]

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1042188128&n=4



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

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

Наверх




Память: 0.47 MB
Время: 0.011 c
7-30632
@Ujin
2003-02-14 23:35
2003.04.10
И опять про печать...


14-30561
VID
2003-03-25 01:26
2003.04.10
Номера страниц при распечатке в Excel


1-30349
Yr2
2003-03-29 19:17
2003.04.10
Как


14-30553
Dmytro
2003-03-24 17:37
2003.04.10
Сom - компоненты, где взять?


3-30224
Balu
2003-03-21 11:55
2003.04.10
Выбор базы данных





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский