AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit TClientsocket / TServersocket
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TClientsocket / TServersocket

Ein Thema von delpher · begonnen am 30. Mär 2004 · letzter Beitrag vom 30. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
delpher

Registriert seit: 12. Mär 2004
30 Beiträge
 
#1

Problem mit TClientsocket / TServersocket

  Alt 30. Mär 2004, 13:17
Hallo,


Ich habe mir ein kleines Prog geschrieben und zwar soll der server auf anforderung an den clienten ein bild schicken! Sitze jetzt schon Tagelang dadran ich kriegs nicht hin! Weiss jemand wo mein Fehler ist hier der Code vom Server und vom CLienten!

---SERVERPROGRAMM---
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
myString : String;
buff : array[0..MAX_COMPUTERNAME_LENGTH] of char;
nsize : DWORD;
rc : hwnd;
begin
  nsize := SizeOf(buff);
  myString := Socket.ReceiveText;
  Randomize();

if MyString = 'screenshotthen
  Socket.SendStream(TFileStream.Create('c:\screen.jpg', fmOpenRead or fmShareDenyWrite))
end;

procedure TForm1.FormCreate(Sender: TObject);


begin
  serversocket1.Active:=true;
end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  serversocket1.Close;
end;

end.




---CLIENT PROGRAMM---

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button5: TButton;
    Button8: TButton;
    ClientSocket1: TClientSocket;
    procedure Button5Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FStream: TStream;

implementation

{$R *.dfm}

procedure TForm1.Button5Click(Sender: TObject);
begin
if ClientSocket1.Active = False then
begin
ClientSocket1.Host := Edit1.Text;
ClientSocket1.Port := 1111;
ClientSocket1.Active := True;
Button5.Caption := 'DISCONNECT';
end
else
begin
ClientSocket1.Active := True;
ClientSocket1.Close;
Button5.Caption := 'CONNECT';
end
end;

procedure TForm1.Button8Click(Sender: TObject);
var
 iLen: Integer;
  Bfr: Pointer;


begin
ClientSocket1.Socket.SendText('screenshot');
iLen := clientsocket1.Socket.ReceiveLength;
  GetMem(Bfr, iLen);
  try
    clientsocket1.Socket.ReceiveBuf(Bfr^, iLen);
    FStream.Write(Bfr^, iLen);
  finally
     FreeMem(Bfr);
  end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  form1.Caption := 'CONNECTED';
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Form1.Caption := 'NOT CONNECTED';
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Form1.Caption := 'CONNECTING';
  FStream := TFileStream.Create('c:\test.jpg', fmCreate or fmShareDenyWrite);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ShowMessage(Socket.ReceiveText);
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;

end.

Wieso klappt das nicht? Ich dreh noch durch das kann doch nicht so schwer sein!

[edit=Sharky]Heute zum x-ten mal Delphi-Tags gesetzt. Mfg, Sharky[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Was mache ich falsch???

  Alt 30. Mär 2004, 13:20
Bitte ändere mal deinen Titel und setzte die Delphi-Tags.

Das kann man so ja keinem zumuten.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Was mache ich falsch???

  Alt 30. Mär 2004, 13:21
Hi,

nimm die Indy-KOmponenten dann ersparst Du Dir viele schlaflose Nächte.
Dafür gibt's hier auch genügend Bsp. wie man Dateien versendet.

GRuß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Was mache ich falsch???

  Alt 30. Mär 2004, 13:26
Wie DataCool bereits gesagt hat, sind die Indys sehr benutzerfreundlich und wirklich super.

Ich weiß zwar nicht, welche Delphi-Version man mindestens braucht, bzw welche du hast...


PS: Danke für die Editierung deines 1. Beitrags.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Was mache ich falsch???

  Alt 30. Mär 2004, 13:27
Zitat von Matze:
...PS: Danke für die Editierung deines 1. Beitrags.
Guck mal genau wer das gemacht hat
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Was mache ich falsch???

  Alt 30. Mär 2004, 13:29
Zitat von Sharky:
Guck mal genau wer das gemacht hat
Kein Wunder, dass der Titel noch nicht geändert ist.


sorry, dann danke ich dir.
  Mit Zitat antworten Zitat
delpher

Registriert seit: 12. Mär 2004
30 Beiträge
 
#7

Re: Was mache ich falsch???

  Alt 30. Mär 2004, 13:32
Ich habe aber jetzt das ganze Programm schon mit TClientsocket geschrieben währe blöde das alles jetzt auf Indy umzustellen! Verstehe einfach nicht wieso es nicht klappt normalerweise müsste es doch funktionieren oder nicht?

PS: Danke Shkarky für den Edit des Beitrags
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8

Re: Was mache ich falsch???

  Alt 30. Mär 2004, 13:42
Zitat von delpher:
PS: Danke Shkarky für den Edit des Beitrags
Du solltest aber noch immer einen aussagekräftigen Titel wählen

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Problem mit TClientsocket / TServersocket

  Alt 30. Mär 2004, 13:58
Hi,

auch wenn ich immer nur Indy empfehlen kann.

Denke Dein Fehler liegt darin, das Du den Empfangsteil der Clientanwendung nicht im OnRead EReignis hast, sondern in deinem Button8Click.

Wenn man schon nicht die Indys verwendet, dann sollte man sich auch der dadurch entstehenden Eventsteuerung bewußt sein.

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
TheBluescreen

Registriert seit: 7. Okt 2003
22 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem mit TClientsocket / TServersocket

  Alt 30. Mär 2004, 17:12
Hi!

Ich hab auch Probleme mit den beiden Sockets... wenn ich übers Internet mit dem Serverprogramm connecten will, kommt der Fehler 10060 (Timeout). Mein Code:

Server:

Delphi-Quellcode:
uses WinInet;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var i: integer;
    msg: string;
begin
Memo1.lines.add (Socket.ReceiveText);
 for i:=0 to ServerSocket1.Socket.ActiveConnections -1 do
  begin
  with ServerSocket1.Socket.Connections [i] do
  if (Connected) then SendText(Socket.RemoteHost+': ' + msg);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
InternetAutodial(internet_autodial_force_unattended, handle);
end;
Client:

Delphi-Quellcode:
uses WinInet;

procedure TForm1.Button1Click(Sender: TObject); //Zu IP connecten
begin
clientsocket1.Host:=edit2.text;
clientsocket1.Active:=true;
end;

procedure TForm1.Button2Click(Sender: TObject); //Senden
begin
if ClientSocket1.active=true
then begin
  ClientSocket1.Socket.SendText(edit1.text);
  edit1.text:='';
end;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.clear;
Memo1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
InternetAutodial(internet_autodial_force_unattended, handle);
end;
INDY versteh ich leider nicht...

MfG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz