ClientSocket Hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
digital_agels
Üye
Mesajlar: 114
Kayıt: 20 Ağu 2004 01:08

ClientSocket Hatası

Mesaj gönderen digital_agels »

Arkadaşlar Ben Servera İstediğimi Yaptırabiliyırum fakat serverın clientede ,serverdaki pcnin ram cpu bilgilerini cliente yollamasını istiyorum
clientin readına kodları yazdım tamam fakat serverı açıyorum clientten bağlanıyorum servera hemen hata geliyor
Hata Nerden Kaynaklanıyor Bulamadım yardımcı olursanız sevinirim..

http://www.secretgroup.org/&/delphi/hata1.JPG

örnek olarak şunu yaptım ....

Kod: Tümünü seç

**************************** Server ***********************

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ScktComp, StdCtrls, TLhelp32, ExtCtrls;

 

type

  TForm1 = class(TForm)

    ServerSocket1: TServerSocket;

    Timer1: TTimer;

    Label1: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure ServerSocket1ClientRead(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure Timer1Timer(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

Function KillTask(ExeFileName: string): integer;

const

  PROCESS_TERMINATE=$0001;

 

var

  ContinueLoop: BOOL;

  FSnapshotHandle: THandle;

  FProcessEntry32: TProcessEntry32;

begin

result := 0;

FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

FProcessEntry32.dwSize := Sizeof(FProcessEntry32);

ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);

while integer(ContinueLoop) <> 0 do

begin

    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =

         UpperCase(ExeFileName))

     or (UpperCase(FProcessEntry32.szExeFile) =

         UpperCase(ExeFileName))) then

     Result := Integer(TerminateProcess(OpenProcess(

                        PROCESS_TERMINATE, BOOL(0),

                        FProcessEntry32.th32ProcessID), 0));

    ContinueLoop := Process32Next(FSnapshotHandle,

                                  FProcessEntry32);

  end;

CloseHandle(FSnapshotHandle);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

ServerSocket1.Port := 3000;

ServerSocket1.Active := true;

end;

 

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

  Socket: TCustomWinSocket);

  var

  s:string;

  begin

    ServerSocket1.Socket.Read(1);

s := Socket.ReceiveText;

if s = '1' then

begin

WinExec('C:\Program Files\Winamp\winamp.exe', SW_SHOWNORMAL);

//kodlar

exit;

 

end;

 

if s = '2' then

begin

Try KillTask('winamp.exe'); Except End;

Exit;

end;

end;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

//form1.Hide;

//timer1.enabled:=false;

 //

 Label1.Caption  := IntToStr(Serversocket1.Socket.ActiveConnections);

 if ServerSocket1.Socket.ActiveConnections = 0 then Exit

 else

ServerSocket1.Socket.SendText('1')

 

end;

 

end.

 

 

 

*************************Client*************************************

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ScktComp, ExtCtrls, SUIForm, SUIButton, SUIEdit, jpeg, wininet;

 

type

  TForm1 = class(TForm)

    Timer1: TTimer;

    ClientSocket1: TClientSocket;

    suiForm1: TsuiForm;

    Edit3: TsuiEdit;

    Button4: TsuiButton;

    Button1: TsuiButton;

    Button2: TsuiButton;

    Button3: TsuiButton;

    Image1: TImage;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure suitempButton1Click(Sender: TObject);

    procedure suitempButton2Click(Sender: TObject);

    procedure suitempButton3Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure suitempButton4Click(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure ClientSocket1Connect(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure ClientSocket1Connecting(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure ClientSocket1Disconnect(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;

      ErrorEvent: TErrorEvent; var ErrorCode: Integer);

    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

    procedure Delay(ms : longint);

var TheTime : LongInt;

begin

   TheTime := GetTickCount + ms;

   while GetTickCount < TheTime do

     Application.ProcessMessages;

end;

procedure TForm1.suitempButton1Click(Sender: TObject);

begin

ClientSocket1.Address := edit3.Text;

ClientSocket1.Port := 3000;

 ClientSocket1.Active := true   ;

 

button4.Enabled:=True;

button1.Enabled:=False;

 

 

 

 end;

procedure TForm1.suitempButton2Click(Sender: TObject);

begin

try

 

 ClientSocket1.Socket.SendText('1')

 

except

end;

 end;

procedure TForm1.suitempButton3Click(Sender: TObject);

begin

try

 

   ClientSocket1.Socket.SendText('2')

 

except

end;

 end;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if ClientSocket1.Active=  true then

begin

 

timer1.Enabled:=false ;

showmessage('Bağlantı Sağlandı');

Button1.Enabled:=False;

 

end

else

begin

timer1.Enabled:=false;

ShowMessage('Bağlantı Sağlanamadı');

 

end;

  end;

procedure TForm1.suitempButton4Click(Sender: TObject);

begin

 ClientSocket1.Active := false   ;

 button1.Enabled:=True;

 button4.Enabled:=False;

 

end;

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

halt;

end;

 

procedure TForm1.ClientSocket1Connect(Sender: TObject;

  Socket: TCustomWinSocket);

begin

Label3.Caption:='Bağlantı Sağlandı.';

button2.Enabled:=True;

button3.Enabled:=True;

 

end;

 

procedure TForm1.ClientSocket1Connecting(Sender: TObject;

  Socket: TCustomWinSocket);

begin

Label3.Caption:='Bağlanıyor...';

end;

 

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;

  Socket: TCustomWinSocket);

begin

Label3.Caption:='Bağlantı Kesildi.';

  button2.Enabled:=False;

button3.Enabled:=False;

end;

 

procedure TForm1.ClientSocket1Error(Sender: TObject;

  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

  var ErrorCode: Integer);

begin

Label3.Caption:='Hata Oluştu.';

end;

 

procedure TForm1.ClientSocket1Read(Sender: TObject;

  Socket: TCustomWinSocket);

 

 

 var

  s:string;

  begin

//  ClientSocket1.Socket.Read(1);

s := Socket.ReceiveText;

if s = '1' then

begin

ShowMessage('Komut Alındı 1');

//kodlar

exit;

 

end;

 

if s = '2' then

begin

 ShowMessage('Komut Alındı 2');

Exit;

end;

end;

 

 

end.
Kullanıcı avatarı
feinpus
Üye
Mesajlar: 214
Kayıt: 17 Kas 2003 04:37
Konum: İstanbul
İletişim:

Mesaj gönderen feinpus »

Cliente nasıl bir kod ile mesaj yollamayı deniyorsun. Clientlere bilgi yollarken clientin server a bağlantı sırasına göre mesaj göndereceksin.

socket.connection[0].sendtext gibisinden bi kod yazman gerekiyor. Kodu salladım tam hatırlamıyorum şu anda.
Oldeye Software
http://www.oldeye.com
digital_agels
Üye
Mesajlar: 114
Kayıt: 20 Ağu 2004 01:08

Mesaj gönderen digital_agels »

kod yanlış olsada teşekkür ederim çözdüm
digital_agels
Üye
Mesajlar: 114
Kayıt: 20 Ağu 2004 01:08

Mesaj gönderen digital_agels »

bu arada örneğin clientte fonsiyon tanımlıyoruz serverdan bumesaj gelince bunu yap diye fakat ben serverın kaç saatir açık olduğunu clientteki labelde nasıl gösterebilirim pc nin kaç saattir açık olduğunu anlamak için uptime fonksiyoynunu kullanıyorum örneğin label1.caption:=uptime; fakat serverdan geleen mesajın fonksiyonunu clientte tanımlıyoruz benim server kaç saattir açık olduğunu anlamak için sanırım serverdan fonksiyonu tanımlamam lazım serverın yolllaması lazım fonsiyonu uptime özlliğini .. bitürlü serverın kaç saatir açık olduğunu çözemedim... :oops: yardımcı olursanız sevinirim
Cevapla