ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Как передать файл по Tcp
  #1  
Старый 21.09.2008, 16:36
ronald
Участник форума
Регистрация: 27.03.2008
Сообщений: 288
Провел на форуме:
800727

Репутация: 83
Отправить сообщение для ronald с помощью ICQ
Exclamation Как передать файл по Tcp

Всем привет!

Взял я из книги фленова Udp-чат и чуть-чуть модифнул, а вот какая бяка получается:
нужно передавать файлы в чате, но почитав, я въехал, что Udp медленней Tcp
прошу помощи вот в чём:
нужно чтобы при нажатии на кнопку выходил лист с директориями, в которых можно выбрать файл и отправить ссылку на него, чтобы сообщение выглядело к примеру так:
"Андрюха, при! вот документ: ССЫЛКА НА СЛИВ ФАЙЛА c компа в локалке"
также в локальной сети есть комп, раздающий вай-фай, т.е. его можно использовать как временное хранилище файлов для передачи

Последний раз редактировалось ronald; 21.09.2008 в 17:24..
 
Ответить с цитированием

  #2  
Старый 21.09.2008, 16:47
Zabuldon
Участник форума
Регистрация: 06.04.2008
Сообщений: 102
Провел на форуме:
162579

Репутация: 28
По умолчанию

не вижу проблемы... используешь диалог типа fileopen, сохрани путь к файлу потом сделай temp директорию на том компе (убедившись что права доступа есть), скопируй туда файл, затем выдай ссылку типа 172.12.12.12/temp/имя файла и все... но есть способы намного проще... юзай сокеты...

вот пример...


Обработчик для клиента:



var
MyStream: TMemoryStream;
begin
MyStream := TMemoryStream.Create;
MyStream.LoadFromFile('c:\windows\рабочий стол\DelphiWorld.txt');
NMStrm1.PostIt(MyStream);
MyStream.Free;
end;




Обработчик для сервера:



procedure TForm1.NMStrmServ1MSG(Sender: TComponent;
const sFrom: string; strm: TStream);
var
MyStream: TMemoryStream;
begin
MyStream := TMemoryStream.Create;
MyStream.CopyFrom(strm, NMStrmServ1.BytesTotal);
MyStream.SaveToFile('c:\windows\рабочий стол\DelphiWorld2.txt');
end;

Пример взят из Delphi World

Последний раз редактировалось Zabuldon; 21.09.2008 в 16:51..
 
Ответить с цитированием

  #3  
Старый 21.09.2008, 16:57
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

ээээ.... Как раз таки наоборот =\
TCP медленее UDP...
ну ты крут, слушай, wi-fi... ссылки...
для начала:
OpenFileDialog - Диалог для выбора файла. Метод Execute откроет диалог. Пример:
Цитата:
if (OpenFileDialog1.Execute) then Edit1.Text:=OpenFileDialog1.FileName else ShowMessage('Файл не выбран');
По поводу передачи файлов:
http://www.hostmake.ru/articles/delphi/384/
www.delphisources.ru/pages/faq/internet_net.html
http://www.cyberforum.ru/delphi/thread8742.html
http://fssr.ru/hz.php?name=Forums&file=viewtopic&t=20820
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #4  
Старый 21.09.2008, 17:00
Zabuldon
Участник форума
Регистрация: 06.04.2008
Сообщений: 102
Провел на форуме:
162579

Репутация: 28
По умолчанию

Цитата:
Сообщение от W!z@rD  
ээээ.... Как раз таки наоборот =\
TCP медленее UDP...
ну ты крут, слушай, wi-fi... ссылки...
для начала:
OpenFileDialog - Диалог для выбора файла. Метод Execute откроет диалог. Пример:

По поводу передачи файлов:
http://www.hostmake.ru/articles/delphi/384/
www.delphisources.ru/pages/faq/internet_net.html
http://www.cyberforum.ru/delphi/thread8742.html
http://fssr.ru/hz.php?name=Forums&file=viewtopic&t=20820
Ну зачем так жестко =)) судя по всему просто человек был дезинформирован =)

З.Ы. вот еще пример с сокетами:


unit Unit1;

interface

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

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
btnTestSockets: TButton;
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure btnTestSocketsClick(Sender: TObject);
private
FStream: TFileStream;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
iLen: Integer;
Bfr: Pointer;
begin
iLen := Socket.ReceiveLength;
GetMem(Bfr, iLen);
try
Socket.ReceiveBuf(Bfr^, iLen);
FStream.Write(Bfr^, iLen);
finally
FreeMem(Bfr);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FStream := nil;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(FStream) then
begin
FStream.Free;
FStream := nil;
end;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
if Assigned(FStream) then
begin
FStream.Free;
FStream := nil;
end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
FStream := TFileStream.Create('c:\temp\test.stream.html', fmCreate or fmShareDenyWrite);
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendStream(TFileStream.Create('c:\temp\test .html', fmOpenRead or fmShareDenyWrite));
end;

procedure TForm1.btnTestSocketsClick(Sender: TObject);
begin
ServerSocket1.Active := True;
ClientSocket1.Active := True;
end;

end.

Последний раз редактировалось Zabuldon; 21.09.2008 в 17:02..
 
Ответить с цитированием

  #5  
Старый 21.09.2008, 17:05
BrainDeaD
Постоянный
Регистрация: 09.06.2005
Сообщений: 531
Провел на форуме:
3516666

Репутация: 439


По умолчанию

Цитата:
Сообщение от ronald  
Всем привет!
Udp медленней Tcp
с каких это пор? в Udp нет проверки ошибок => он быстрее.
 
Ответить с цитированием

  #6  
Старый 21.09.2008, 17:12
ronald
Участник форума
Регистрация: 27.03.2008
Сообщений: 288
Провел на форуме:
800727

Репутация: 83
Отправить сообщение для ronald с помощью ICQ
По умолчанию

ок, Tcp медленней Udp , пойду запомню...
 
Ответить с цитированием

  #7  
Старый 21.09.2008, 17:16
Zabuldon
Участник форума
Регистрация: 06.04.2008
Сообщений: 102
Провел на форуме:
162579

Репутация: 28
По умолчанию

Цитата:
Сообщение от ronald  
ок, Tcp медленней Udp , пойду запомню...
На самом деле они правы UDP пакет устроен проще на его разбор меньше времени уходит
 
Ответить с цитированием

  #8  
Старый 21.09.2008, 17:17
ronald
Участник форума
Регистрация: 27.03.2008
Сообщений: 288
Провел на форуме:
800727

Репутация: 83
Отправить сообщение для ronald с помощью ICQ
По умолчанию

скорей всего меня здесь неправильно поняли т.к.:
Я имел ввиду, что это чат, а не по типу аськи, когда идёт личная беседа
В каждом клиенте стоит и клиент и серверный компонент UDP, для отправки текста, а слить файл должны мочь(корявый йазык ) все компыЮ но при желании человека, а оно должно выражаться кликом по ссылке))

Последний раз редактировалось ronald; 21.09.2008 в 17:30..
 
Ответить с цитированием

  #9  
Старый 21.09.2008, 17:29
Zabuldon
Участник форума
Регистрация: 06.04.2008
Сообщений: 102
Провел на форуме:
162579

Репутация: 28
По умолчанию

Цитата:
Сообщение от ronald  
скорей всего меня здесь неправильно поняли т.к.:
Я имел ввиду, что это чат, а не по типу аськи, когда идёт личная беседа
В каждом клиенте стоит и клиент и серверный компонент UDP, для отправки текста
Мой тебе совет используй сокеты... это намного проще и удобнее а поняли тебя правильно... в любом случае UDP выигрывает
 
Ответить с цитированием

  #10  
Старый 21.09.2008, 18:44
fry
Познающий
Регистрация: 08.03.2008
Сообщений: 46
Провел на форуме:
77313

Репутация: 17
По умолчанию

ни Udp ни Tcp быстрей они все медленые если ваш инет не от билайн

Udp шлёт пакеты. Но делаеть их размеров в файл не стоит. Если ты будешь слать файл разбив на пакеты, то не факт, что ты их всегда будешь получать в правильной очерёдности. И хоть УДП гарантирует доставку. но пакеты могут пропадать.

На этом фоне ТСП проще. Но у УДП есть большое примущество. УДП может преодоевать НАТ который стоит и получателя и отправителя.

А ТСП не может.

Если ты делаешь п2п чат. то УДП гораздо лучше. как раз поэтому скайп использует УДП.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отношения с девушками SuNDowN Болталка 125 11.11.2008 22:52
Архив статей по раскрутке сайта SQL SЕО - тонкости, методы раскрутки 1 21.08.2008 16:30
Кто силен в bash? помогите плз решить задачки... Dj Skeleton™ *nix 28 19.12.2007 13:03
FAQ. Перед тем как задать вопрос. Fata1ex ICQ 1 04.11.2007 20:35
Как записать в файл Даун Чаты 3 15.05.2004 23:18



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ