<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=39328&amp;view=findpost&amp;p=254821</guid>
        <pubDate>Sun, 30 Nov 2003 10:25:28 +0000</pubDate>
        <title>Простой способ отправки файлов</title>
        <link>https://forum.sources.ru/index.php?showtopic=39328&amp;view=findpost&amp;p=254821</link>
        <description><![CDATA[Song: [doHTML]&lt;pre&gt;&lt;br&gt;unit Unit1; &lt;br&gt;&lt;br&gt;interface &lt;br&gt;&lt;br&gt;&lt;b&gt;uses&lt;/b&gt; &lt;br&gt; &nbsp;Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, &lt;br&gt; &nbsp;ScktComp, ExtCtrls, StdCtrls; &lt;br&gt;&lt;br&gt;&lt;b&gt;type&lt;/b&gt; &lt;br&gt; &nbsp;TForm1 = &lt;b&gt;class&lt;/b&gt;(TForm) &lt;br&gt; &nbsp; &nbsp;Image1: TImage; &lt;br&gt; &nbsp; &nbsp;Image2: TImage; &lt;br&gt; &nbsp; &nbsp;ClientSocket1: TClientSocket; &lt;br&gt; &nbsp; &nbsp;ServerSocket1: TServerSocket; &lt;br&gt; &nbsp; &nbsp;Button1: TButton; &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;procedure&lt;/b&gt; Image1Click(Sender: TObject); &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;procedure&lt;/b&gt; FormCreate(Sender: TObject); &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;procedure&lt;/b&gt; ClientSocket1Connect(Sender: TObject; &lt;br&gt; &nbsp; &nbsp; &nbsp;Socket: TCustomWinSocket); &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;procedure&lt;/b&gt; ServerSocket1ClientRead(Sender: TObject; &lt;br&gt; &nbsp; &nbsp; &nbsp;Socket: TCustomWinSocket); &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;procedure&lt;/b&gt; ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); &lt;br&gt; &nbsp;&lt;b&gt;private&lt;/b&gt; &lt;br&gt; &nbsp; &nbsp;{ &lt;b&gt;Private&lt;/b&gt; declarations } &lt;br&gt; &nbsp; &nbsp;Reciving: boolean; &lt;br&gt; &nbsp; &nbsp;DataSize: integer; &lt;br&gt; &nbsp; &nbsp;Data: TMemoryStream; &lt;br&gt; &nbsp;&lt;b&gt;public&lt;/b&gt; &lt;br&gt; &nbsp; &nbsp;{ &lt;b&gt;Public&lt;/b&gt; declarations } &lt;br&gt; &nbsp;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt;&lt;br&gt;&lt;b&gt;var&lt;/b&gt; &lt;br&gt; &nbsp;Form1: TForm1; &lt;br&gt;&lt;br&gt;&lt;b&gt;implementation&lt;/b&gt; &lt;br&gt;&lt;br&gt;{&#036;R *.DFM} &lt;br&gt;&lt;br&gt;&lt;b&gt;procedure&lt;/b&gt; TForm1.Image1Click(Sender: TObject); &lt;br&gt;&lt;b&gt;begin&lt;/b&gt; &lt;br&gt; &nbsp;//&lt;i&gt; Это процедура для открытия сокета на ПРИЁМ (RECEIVING). &lt;/i&gt;&lt;br&gt; &nbsp;//&lt;i&gt; Button1.Click is this &lt;b&gt;procedure&lt;/b&gt; as well. &lt;/i&gt;&lt;br&gt; &nbsp;ClientSocket1.Active:= true; &lt;br&gt;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt;&lt;br&gt;&lt;b&gt;procedure&lt;/b&gt; TForm1.FormCreate(Sender: TObject); &lt;br&gt;&lt;b&gt;begin&lt;/b&gt; &lt;br&gt; &nbsp;//&lt;i&gt; Открытие ОТПРАВЛЯЮЩЕГО (SENDING) сокета. &lt;/i&gt;&lt;br&gt; &nbsp;ServerSocket1.Active:= true; &lt;br&gt;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt;&lt;br&gt;&lt;b&gt;procedure&lt;/b&gt; TForm1.ClientSocket1Connect(Sender: TObject; &lt;br&gt; &nbsp;Socket: TCustomWinSocket); &lt;br&gt;&lt;b&gt;begin&lt;/b&gt; &lt;br&gt; &nbsp;//&lt;i&gt; Посылаем команду для начала передачи файла. &lt;/i&gt;&lt;br&gt; &nbsp;Socket.SendText(&#39;send&#39;); &lt;br&gt;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt;&lt;br&gt;&lt;b&gt;procedure&lt;/b&gt; TForm1.ClientSocket1Read(Sender: TObject; &lt;br&gt; &nbsp;Socket: TCustomWinSocket); &lt;br&gt;&lt;b&gt;var&lt;/b&gt; &lt;br&gt; &nbsp;s, sl: string; &lt;br&gt;&lt;b&gt;begin&lt;/b&gt; &lt;br&gt; &nbsp;s:= Socket.ReceiveText; &lt;br&gt; &nbsp;//&lt;i&gt; Если мы не в режиме приёма: &lt;/i&gt;&lt;br&gt; &nbsp;&lt;b&gt;if&lt;/b&gt; not Reciving &lt;b&gt;then&lt;/b&gt; &lt;br&gt; &nbsp;&lt;b&gt;begin&lt;/b&gt; &lt;br&gt; &nbsp; &nbsp;//&lt;i&gt; Теперь нам необходимо получить длину потока данных. &lt;/i&gt;&lt;br&gt; &nbsp; &nbsp;SetLength(sl, StrLen(PChar(s))+1); //&lt;i&gt; +1 &lt;b&gt;for&lt;/b&gt; the null terminator &lt;/i&gt;&lt;br&gt; &nbsp; &nbsp;StrLCopy(@sl[1], PChar(s), Length(sl)-1); &lt;br&gt; &nbsp; &nbsp;DataSize:= StrToInt(sl); &lt;br&gt; &nbsp; &nbsp;Data:= TMemoryStream.Create; &lt;br&gt; &nbsp; &nbsp;//&lt;i&gt; Удаляем информацию о размере из данных. &lt;/i&gt;&lt;br&gt; &nbsp; &nbsp;Delete(s, 1, Length(sl)); &lt;br&gt; &nbsp; &nbsp;Reciving:= true; &lt;br&gt; &nbsp;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt; &nbsp;//&lt;i&gt; Сохраняем данные в файл, до тех пор, пока не получим все данные. &lt;/i&gt;&lt;br&gt; &nbsp;try &lt;br&gt; &nbsp; &nbsp;Data.Write(s[1], length(s)); &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;if&lt;/b&gt; Data.Size = DataSize &lt;b&gt;then&lt;/b&gt; &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;begin&lt;/b&gt; &lt;br&gt; &nbsp; &nbsp; &nbsp;Data.Position:= 0; &lt;br&gt; &nbsp; &nbsp; &nbsp;Image2.Picture.Bitmap.LoadFromStream(Data); &lt;br&gt; &nbsp; &nbsp; &nbsp;Data.Free; &lt;br&gt; &nbsp; &nbsp; &nbsp;Reciving:= false; &lt;br&gt; &nbsp; &nbsp; &nbsp;Socket.Close; &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt; &nbsp;except &lt;br&gt; &nbsp; &nbsp;Data.Free; &lt;br&gt; &nbsp;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt;&lt;br&gt;&lt;b&gt;procedure&lt;/b&gt; TForm1.ServerSocket1ClientRead(Sender: TObject; &lt;br&gt; &nbsp;Socket: TCustomWinSocket); &lt;br&gt;&lt;b&gt;var&lt;/b&gt; &lt;br&gt; &nbsp;ms: TMemoryStream; &lt;br&gt;&lt;b&gt;begin&lt;/b&gt; &lt;br&gt; &nbsp;//&lt;i&gt; Клиент получает команду на передачу файла. &lt;/i&gt;&lt;br&gt; &nbsp;&lt;b&gt;if&lt;/b&gt; Socket.ReceiveText = &#39;send&#39; &lt;b&gt;then&lt;/b&gt; &lt;br&gt; &nbsp;&lt;b&gt;begin&lt;/b&gt; &lt;br&gt; &nbsp; &nbsp;ms:= TMemoryStream.Create; &lt;br&gt; &nbsp; &nbsp;try &lt;br&gt; &nbsp; &nbsp; &nbsp;//&lt;i&gt; Получаем данные на передачу. &lt;/i&gt;&lt;br&gt; &nbsp; &nbsp; &nbsp;Image1.Picture.Bitmap.SaveToStream(ms); &lt;br&gt; &nbsp; &nbsp; &nbsp;ms.Position:= 0; &lt;br&gt; &nbsp; &nbsp; &nbsp;//&lt;i&gt; Добавляем длину данных, чтобы клиент знал, сколько данных будет передано&lt;/i&gt;&lt;br&gt; &nbsp; &nbsp; &nbsp;//&lt;i&gt; Добавляем #0 , чтобы можно было определить, где заканчивается информация о размере. &lt;/i&gt;&lt;br&gt; &nbsp; &nbsp; &nbsp;Socket.SendText(IntToStr(ms.Size) + #0); &lt;br&gt; &nbsp; &nbsp; &nbsp;//&lt;i&gt; Посылаем его. &lt;/i&gt;&lt;br&gt; &nbsp; &nbsp; &nbsp;Socket.SendStream(ms); &lt;br&gt; &nbsp; &nbsp;except &lt;br&gt; &nbsp; &nbsp; &nbsp;//&lt;i&gt; Итак, осталось освободить поток, если что-то не так. &lt;/i&gt;&lt;br&gt; &nbsp; &nbsp; &nbsp;ms.Free; &lt;br&gt; &nbsp; &nbsp;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt; &nbsp;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt;&lt;b&gt;end&lt;/b&gt;; &lt;br&gt;&lt;br&gt;&lt;b&gt;end&lt;/b&gt;.&lt;br&gt;&lt;/pre&gt;&lt;br&gt;Автор &lt;a href=&quot;mailto:mummud@hotmail.com&quot;&gt;М.К.&lt;/a&gt;[/doHTML]<br><br>Оригинал: <a href='http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=991237103&n=20' target='_blank'>http://www.delphimaster.ru/cgi-bin/faq.pl?...=991237103&n=20</a>]]></description>
        <author>Song</author>
        <category>Интернет, сети, протоколы</category>
      </item>
	
      </channel>
      </rss>
	