Autor Beitrag
Pepe
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 107

Win 98, Win 2000 Prof., Win XP Prof.
Delphi 2005 Prof.
BeitragVerfasst: Mi 05.05.04 15:08 
Hi,
ich habe delphi sieben und benutz zum versenden von daten im netzwerk die TTCPCLient und die TTCPServer Komponente...
nun wollte ich eine datei über das netzwerk verschicken und wollte dazu dieses beispiel benutzen:

delphiforum.de/viewtopic.php?t=2632

leider gibt es Bei der TTCPServer Komponente die funktion:
Socket.ReceiveLength;

hat jemand von euch ne idee, wie ich das umgehen kann bzw. nen ersatz dafür??

Danke schonmal!

MfG
der Pepe
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 05.05.04 15:58 
Hallo erstmal!

Zitat:
leider gibt es Bei der TTCPServer Komponente die funktion:
Socket.ReceiveLength;


Leider? Inwiefern hast du ein Problem damit, daß es die Funktion gibt? *Grübel*

Cu,
Udontknow
Pepe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 107

Win 98, Win 2000 Prof., Win XP Prof.
Delphi 2005 Prof.
BeitragVerfasst: Mi 05.05.04 21:29 
So, hier is einmal der Quelli von meinem Progg...

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
unit UniChj;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Sockets, StdCtrls, ExtCtrls, mmsystem,jpeg;

type
  TfrmMain = class(TForm)
    Server: TTcpServer;
    memControl: TMemo;
    Client: TTcpClient;
    txtIp: TEdit;
    txtPort: TEdit;
    btnGetReady: TButton;
    memMessage: TMemo;
    btnSend: TButton;
    Label1: TLabel;
    Label2: TLabel;
    lblIpAdresse: TLabel;
    imgLocalScr: TImage;
    btnSendScreen: TButton;
    procedure DataArive(Sender: TObject; ClientSocket: TCustomIpClient);
    procedure btnGetReadyClick(Sender: TObject);
    procedure btnSendClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure btnSendScreenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmMain: TfrmMain;
  online: Integer;

implementation

{$R *.dfm}

procedure ScreenShot(Bild: TBitMap);
var
  c: TCanvas;
  r: TRect;
begin
  c := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try
    r := Rect(0, 0, Screen.Width, Screen.Height);
    Bild.Width := Screen.Width;
    Bild.Height := Screen.Height;
    Bild.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;

procedure TfrmMain.DataArive(Sender: TObject; ClientSocket: TCustomIpClient);
var s:string;
  FStream: TFileStream;
  SizeOfFile: Integer;
  pBuffer: Pointer;
begin
memControl.Lines.Add(ClientSocket.LookupHostName(ClientSocket.RemoteHost)+'('+ClientSocket.RemoteHost+')['+TimeToStr(Time())+']:');
 s:=ClientSocket.Receiveln;
 if s='#%screensend%#' then
 begin
  FStream:=TFileStream.Create('gettedScreen.jpg', fmOpenWrite);
  s:=CLientSocket.Receiveln;
  SizeOfFile := strtoint(s);
   memControl.Lines.Add(inttostr(SizeOfFile));
  GetMem(pBuffer, SizeOfFile);
  try
    ClientSocket.ReceiveBuf(pBuffer^, SizeOfFile);
    FStream.Write(pBuffer^, SizeOfFile);
  finally  
    FreeMem(pBuffer); 
    FStream.Free; 
  end;


 memControl.Lines.Add('check');
 end
 else
 begin
 while s <> '#%end%#' do
 begin
  memControl.Lines.Add(s);
  s:=ClientSocket.Receiveln;
 end;
 end;
 sndPlaySound(PChar('Message.wav'),SND_ASYNC);
 frmMain.Activate;
end;

procedure TfrmMain.btnGetReadyClick(Sender: TObject);
begin
if online = 0 then
begin
 Server.LocalPort := txtPort.Text;
 Server.Active := true;
 btnGetReady.Caption:='Go &Offline';
 online:=1;
 memControl.Lines.Clear;
 memControl.Lines.Add('*** Online - Sie können nun Msg`s senden und empfangen ***');
end
else
begin
 Server.Active := false;
 btnGetReady.Caption:='Go &Online';
 online:=0;
end;
end;

procedure TfrmMain.btnSendClick(Sender: TObject);
 var I:Integer;
begin
if online = 1 then
begin
 Client.RemoteHost:=txtIP.Text;
 Client.RemotePort:=txtPort.Text;
 try
 if Client.Connect then
 begin
  memControl.Lines.add('You write['+TimeToStr(Time())+']:');
  for I:=0 to memMessage.Lines.Count -1 do
  begin
  Client.Sendln(memMessage.Lines[I]);
  memControl.Lines.add(memMessage.Lines[I]);
  end;
  Client.Sendln(' ');
  Client.Sendln('#%end%#');
  memMessage.Lines.Clear;
  memControl.Lines.add(' ');
 end
 else memControl.Lines.add('*** Nachricht konnte nich gesendet werden Grund: Zielhost nicht erreichbar! ***');
 finally
  Client.disconnect;
 end;
end
else begin
 memControl.Lines.Add('*** Sie müssen erst Online ***');
end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
online:=0;
frmMain.Height:=374;
frmMain.Width:=409;
lblIpAdresse.Caption:='Ihre Ip-Adresse lautet: '+Client.LocalHostAddr;
end;

procedure TfrmMain.FormResize(Sender: TObject);
begin
memControl.Width:=frmMain.Width-32;
btnGetReady.Width:=frmMain.Width-btnGetReady.Left-16;
txtIp.Width:=frmMain.Width-txtIp.Left-16;
memMessage.Width:=frmMain.Width-32;
btnSend.Width:=frmMain.Width-32;
//btnSendScreen.Width:=frmMain.Width-16;

memControl.Height:=frmMain.Height-210;

Label2.Top:=memControl.Height+memControl.top+7;
txtIp.Top:=memControl.Height+memControl.top+7;
memMessage.Top:=memControl.Height+memControl.top+31;
btnSend.Top:=memControl.Height+memControl.top+87;
lblIpAdresse.Top:=memControl.Height+memControl.top+119;
btnSendScreen.Top:=memControl.Height+memControl.top+116;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Server.Active := false;
 btnGetReady.Caption:='Go &Online';
 online:=0;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
 Server.Active := false;
 frmMain.Close;
end;

procedure TfrmMain.btnSendScreenClick(Sender: TObject);
var jp:TJpegImage;
    bitmap:TBitmap;
    FStream:TFileStream;
begin
ScreenShot(imglocalscr.Picture.Bitmap);
imglocalscr.Picture.SaveToFile('localScr.bmp');
bitmap:=TBitmap.Create;
try
 bitmap.LoadFromFile('localScr.bmp');
 jp:=TJpegImage.Create;
 try
  jp.Assign(bitmap);
  jp.SaveToFile('localScr.jpg');
 finally
 jp.Free;
 end;
finally
bitmap.free;
end;

 Client.RemoteHost:=txtIP.Text;
 Client.RemotePort:=txtPort.Text;
 try
 if Client.Connect then
 begin
  Client.Sendln('#%screensend%#');
  FStream := TFileStream.Create('localScr.jpg', fmOpenRead);
  Client.Sendln(inttostr(FStream.Size));
  Client.SendStream(FStream);
 end;

 finally
 Client.Disconnect;
 end;

end;

end.


wenn ich nun auf btnSendScreen klicke, bleibt es komplett stehen, warum auch immer...
atm glaub ich es liegt eher an der funktion Client.SendStream allerdings habe ich keine ahnung, warum es nich funktioniert...


danke schonmal

MfG
der Pepe

Moderiert von user profile iconUdontknow: Code- durch Delphi-Tags ersetzt.