![]() |
Problem mit TClientsocket / TServersocket
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 = 'screenshot' then 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] |
Re: Was mache ich falsch???
Bitte ändere mal deinen Titel und setzte die Delphi-Tags.
Das kann man so ja keinem zumuten. :twisted: |
Re: Was mache ich falsch???
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 |
Re: Was mache ich falsch???
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... :roll: PS: Danke für die Editierung deines 1. Beitrags. :thumb: |
Re: Was mache ich falsch???
Zitat:
|
Re: Was mache ich falsch???
Zitat:
:oops: sorry, dann danke ich dir. ;) |
Re: Was mache ich falsch???
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 :-D |
Re: Was mache ich falsch???
Zitat:
...:cat:... |
Re: Problem mit TClientsocket / TServersocket
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 |
Re: Problem mit TClientsocket / TServersocket
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:
Client:
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;
Delphi-Quellcode:
INDY versteh ich leider nicht...
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; MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz