![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Соединение TClientSocet и TServerSocet [D6, Win2k]
DelphiN! © (2003-11-14 19:09:00)
Хочу понять технологию Client Server, но как всегда много загвоздок, вот откопал инфу:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Image1: TImage;
Image2: TImage;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
private
Reciving: boolean;
DataSize: integer;
Data: TMemoryStream;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image1Click(Sender: TObject);
begin
ClientSocket1.Active:= true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.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); // +1 for the null terminator
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
Data.Position:= 0;
Image2.Picture.Bitmap.LoadFromStream(Data);
Data.Free;
Reciving:= false;
Socket.Close;
end;
except
Data.Free;
end;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ms: TMemoryStream;
begin
if Socket.ReceiveText = "send" then
begin
ms:= TMemoryStream.Create;
try
Image1.Picture.Bitmap.SaveToStream(ms);
ms.Position:= 0;
Socket.SendText(IntToStr(ms.Size) + #0);
Socket.SendStream(ms);
except
ms.Free;
end;
end;
end;
При выполнении image1click вылетает динамическая ошибка "No adress specified", при установке свойств компонента
ClienSocket1.adress := "localhost";
ClientSocet1.host := "localhost";
Вылетает новая ошибка: "Asynchronous socket error 10049"
Что я делаю не так?
Цель программы вроде такая: при выполнении image1.click, image1.picture должно переслаться в image2.picture
DelphiN! (2003-11-16 20:18:00) [1]
Спасибо, я уже разобрался, я просто не указывал порт! его нужно ставить больше 1000, а свойство хост должно быть равно имени хоста, а если локальный хост - localhost
RoLeX © (16.11.03 01:51) [7]>
www.DelphiNsWorld.Narod.ru/Articles/Articles3/send_file_with_TCLIENTSOCKET_TSERVERSOCKET.htm
www.DelphiNsWorld.Narod.ru/Articles/Articles3/Send_file_with_socet_connect.htm
www.DelphiNsWorld.Narod.ru/Articles/chat_exemble_in_delphi_na_osnove_socetov_.htm
вот тебе примеры, но перед этим не забудь указать:
clientsocket1.host := "localhost";
clientsocket1.port := 1001; {именно в этом была моя загвоздка!!!}
ServerSocket.port := 1001; {и в этом тоже соответственно!}
агличанен (2003-11-16 05:37:00) [2]
Соединение ТКлиентСосет и ТСерверСосет.. "Классный" заголовок.
RoLeX (2003-11-16 01:51:00) [3]
> Silver Alex © (14.11.03 21:29) [4]
> Если хочешь могу на мыло скинуть пару примеров
Скинь мне тоже - rolex5@yandex.ru
RoLeX (2003-11-16 01:51:00) [4]
> Silver Alex © (14.11.03 21:29) [4]
> Если хочешь могу на мыло скинуть пару примеров
Скинь мне тоже - rolex5@yandex.ru
DelphiN! (2003-11-15 12:24:00) [5]
Удалено модератором
Примечание: Личная переписка
Silver Alex (2003-11-14 21:29:00) [6]
Если хочешь могу на мыло скинуть пару примеров
DelphiN! (2003-11-14 20:59:00) [7]
Вобщем как мне любым альтернативным способом сделать вышеописанное
DelphiN! (2003-11-14 20:40:00) [8]
Тогда какой компонент лучше альтернативно использовать, для выполнения вышеуказанной задачи?
Kotka (2003-11-14 19:59:00) [9]
Нельзя писать ClienSocket1.adress := "localhost"; оно только для ип.
Попробуй указать вместо localhost свой ип.