Client / Server da Socket Sorunu Alıyorum...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
M_D_5
Üye
Mesajlar: 39
Kayıt: 06 Nis 2006 01:53

Client / Server da Socket Sorunu Alıyorum...

Mesaj gönderen M_D_5 »

Arkdaşlar yapmış olduğum uygulamada bir hata alıyorum. nedenini bilmiyorum. yapmış olduğum şey.. chat programı gibi basit bir uygulama. burda amaç 2 pc arasında bağlantı sağlamak..

kodlarım şöyle..

server

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
serversocket1.Port:=1555;
serversocket1.Active:=true;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var 
mesaj:string; 
begin 
mesaj:=socket.ReceiveText; 
showmessage(mesaj);

end;

end.

Client....

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    ClientSocket1: TClientSocket;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Host:=edit1.text; 
clientsocket1.Port:=strtoint(edit2.text);
clientsocket1.Active:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
clientsocket1.Socket.SendText(edit3.text);
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
label4.Caption:='Connected to Server';
end;

end.
Aldığım Hata İse Şöyle...

Asynchronous socket error 10060
Php & Delphi Coder
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

bu hatayı almana sebep olabilecek 3 şey aklıma geliyor.

-server açılmadan yani belirtilen port dinlemeye alınmadan clientden bağlanmaya çalışıyor olabilirsin..
-güvenlik duvarından server a izin vermemiş olabilirsin dolayısıyla server portu dinleyemiyo olabilir.

- client de yanlış host adı ve port giriyor olabilirsin
M_D_5
Üye
Mesajlar: 39
Kayıt: 06 Nis 2006 01:53

Mesaj gönderen M_D_5 »

unicorn64 yazdı:bu hatayı almana sebep olabilecek 3 şey aklıma geliyor.

-server açılmadan yani belirtilen port dinlemeye alınmadan clientden bağlanmaya çalışıyor olabilirsin..
-güvenlik duvarından server a izin vermemiş olabilirsin dolayısıyla server portu dinleyemiyo olabilir.

- client de yanlış host adı ve port giriyor olabilirsin

Kendi bilgisayarımda deneyince çalışıyor... başka bir bilgisayarda hata veriyor. yani şöyle.. serveri başka bir pc de çalışştırıyorum.. Güvenlik Engelini Kaldır diyorum pc nin ip sini istemciye yazıyorum ve bağlan dedimğim de hata alıyorum....
Php & Delphi Coder
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

bak şimdi sorun biraz daha açığa kavuştu :)
pc nin ip sini istemciye yazıyorum ve bağlan dedimğim de hata alıyorum....
ve
clientsocket1.Host:=edit1.text;
yani edit e ip girmene rağmen bunu HOSt değerine Yani pcnin adı olarak kullanılacak şekilde kullanıyorsun. dolayısıyla mesela 10.0.0.7 isimli bi server olmadığı için çakalıyo program.

server bilgisayarın adını kullanmak istiyorsan

Kod: Tümünü seç

clientsocket1.Host:=edit1.text; 
server bilgisayarın ip numarasını kullanmak istiyorsan

Kod: Tümünü seç

clientsocket1.Address:=edit1.text;
şeklinde kullanmalısın. bu arada bilgisayar adı kullanıcı adından farklıdır.
bilgisayarım->sağ klik->özellikler->bilgisayar adı->tam bilgisayar adı ifadesinde yazan kullanılmalı
M_D_5
Üye
Mesajlar: 39
Kayıt: 06 Nis 2006 01:53

Mesaj gönderen M_D_5 »

Hocam şimdi biraz daha ayrıntılı anlatayım.. Benim denediğim bilgisayar benim modeme bağlı arkadaşın bilgisayarı.. yani aynı evdeki bilgisayar... şimdi ilk denemede onun ip sini alıp yazıyorum.. 88... bilmem ne.. ip ye göre olmuyor hata veriyor ... siz dedikten sonra onun bilgisayar tam adını yazdım bu sefer farklı bir hata verdi.. şöyle:

Windows socket error: istenen ad geçerli ve veritabanında bulundu, ancak çözümlendiği doğru ilişkili verisi yok
(11004), on API 'ASync Lookup'


clientsocket1.host:=edit1.text; // buraya bilgisayrın tam adını yazınca işte üstteki hatayı verdi...

daha sonra clientsocket1.adress:=Edit1.text; // burayda ip yi yazınca yinee ilk socket hatası veriyor...


başka bir bilgisayarda (Uzak pc ağa bağlı olmayan) bilgisayar adını ve ip sini denedim yine socket hatası verdi..
:?

Bi El Atsanız.....
Php & Delphi Coder
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

S.A
Ufak bir şey dikkatimi çekti. 88 ile başlayan bir IP den bahsetmişsiniz bu local ağ IP si değil zannedersem internet IP si değilmi?
Eğer local ağda bu işi yapcaksanız yazdığın kodlarda bir problem yok gibi ama internet üzerinden yapacaksanız aradaki ADSL modemin gerekli portunu(kodlarınıza göre 1555) ağdaki sever alarak kullanacağınız makineye yönlendirmeniz gerekir.
M_D_5
Üye
Mesajlar: 39
Kayıt: 06 Nis 2006 01:53

Mesaj gönderen M_D_5 »

mero yazdı:S.A
Ufak bir şey dikkatimi çekti. 88 ile başlayan bir IP den bahsetmişsiniz bu local ağ IP si değil zannedersem internet IP si değilmi?
Eğer local ağda bu işi yapcaksanız yazdığın kodlarda bir problem yok gibi ama internet üzerinden yapacaksanız aradaki ADSL modemin gerekli portunu(kodlarınıza göre 1555) ağdaki sever alarak kullanacağınız makineye yönlendirmeniz gerekir.
Ağdaki pc değil.. İnternetteki herhangi bir bilgisayar olacak benim bağlanmak istediğim.. o port nosuna gelincede bendeki kitaptaki uygulamada o numara olarak almış.. biz bu port numaralarını neye göre alacağız.... Sallama bir numara yazmıycaz heralde değilmi? modemden bahsetmişsin .. biraz daha açabilrsen sevinirim.. Modemin portunumu yazmamız gerekli?
Php & Delphi Coder
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

internetteki herhangi bir pc... hımm. server adsl modemle bağlandığını varsayıyorum. hala 56K kullanmak zorunda kalan yoktur sanırım.

serverin bağlı olduğu modemin markasına göre bu port yönlendirme işi değişiyorr(modemin yonetim arayuzune bağlı olarak) adsl modemde port yonlendirme,port açma,port forwarding gibi anahtar sözcüklere google amca bi sürü yanıt verir anahtar sözcüklerin arasına bi de modemin markasını yazdınmı buldun cevabı :D
genelde eMule gibi programlar için yada bazı oyunlar için (yani onların kullandığı port numarası için) anlatımlar çok nette. onları inceleyip uyarlarsın kendine gore..

port numarası (yanılmıyorsam) 1-65535 arasında bi sayı olabilir. ancak 200 den yukarı (hatta 1000 den yukarı) versen ii olur. çünkü mesela ftp:21, http:80, telnet:13. portu kullanıyor. yani onların portuna dokunmada naparsan yap :D
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Client / Server da Socket Sorunu Alıyorum...

Mesaj gönderen neu84 »

Kardeş selamm. şuanda bu bahsettigin sorunu yaşıyorum ve hiç bi yerde bulamıyorum. bi burada buldum sandım o da tam olarak cevap verilmeden kesilmiş sohbet. Acaba o zamanlar çözebildin mi bu sorunu? Aynı ağ üzerindeki bütün pc lere baglanabiliyorum socket kullanarak, ama ağımda olmayan farklı bi pc ye, uzakta olan bi pc ye baglanmak istiyorum yazdıgım 2 programla ama olmuyo. client ve server isimli program yazdım: server ı karşıya kuruyorum. client ı açıp baglanıp mesaj atıyorum. aynı ağda oluyo ama seninde dedigin gibi farklı bi ağa gitmiyo, bağlantı olmuyo bi türlü.. önerilerini bekliyorum.
Cevapla