Client-Server - Soru
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 6
- Kayıt: 06 Eyl 2010 12:52
Client-Server - Soru
İyi günler;
Client ve Server olmak üzere iki ayrı proje oluşturdum.
Client üzerinde edit1 edit2 edit3 ve edit4 var. Bir buton ile bunların textlerini Server'a göndermek istiyorum.
Bunların Server'a gittiğinde de otomatik olarak label1 label2 label3 ve label4 e sırasıyla yerleşmelerini istiyorum.
Editlerin textlerini gönderirken sorun yaşamıyorum ama sadece bir label üzerinde yanyana çıkıyorlar. Nasıl yapacağımı çözemedim. Yardımcı olabilirseniz teşekkürler.
İyi çalışmalar
(ek düzenleme: server içerisinde client'teki edit1.text'i kod olarak nasıl gösterebilirim. yani ona direk olarak ulaşmam için nasıl bir kod gerekli, yani client(edit1.text) gibi..)
Client ve Server olmak üzere iki ayrı proje oluşturdum.
Client üzerinde edit1 edit2 edit3 ve edit4 var. Bir buton ile bunların textlerini Server'a göndermek istiyorum.
Bunların Server'a gittiğinde de otomatik olarak label1 label2 label3 ve label4 e sırasıyla yerleşmelerini istiyorum.
Editlerin textlerini gönderirken sorun yaşamıyorum ama sadece bir label üzerinde yanyana çıkıyorlar. Nasıl yapacağımı çözemedim. Yardımcı olabilirseniz teşekkürler.
İyi çalışmalar
(ek düzenleme: server içerisinde client'teki edit1.text'i kod olarak nasıl gösterebilirim. yani ona direk olarak ulaşmam için nasıl bir kod gerekli, yani client(edit1.text) gibi..)
En son yeni_delphi tarafından 06 Eyl 2010 10:27 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Client-Server - Soru
mantığı anladıysan gerisi çocuk oyuncağı, port ve host vermeyi unutmayın!!!
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ScktComp;
type
TForm1 = class(TForm)
Clientsocket1: TClientSocket;
StatusBar1: TStatusBar;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
Button3: TButton;
CheckBox1: TCheckBox;
Checkbox2: TCheckBox;
procedure Button1Click(Sender : TObject);
procedure Button2Click(Sender : TObject);
procedure Clientsocket1Error(Sender : TObject; Socket : TCustomWinSocket;
ErrorEvent : TErrorEvent; var ErrorCode : integer);
procedure Clientsocket1Disconnect(Sender : TObject;
Socket : TCustomWinSocket);
procedure Clientsocket1Connect(Sender : TObject;
Socket : TCustomWinSocket);
procedure Button3Click(Sender : TObject);
procedure FormClose(Sender : TObject; var Action : TCloseAction);
procedure FormDestroy(Sender : TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 : TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender : TObject);
begin
Clientsocket1.Active := True;
end;
procedure TForm1.Button2Click(Sender : TObject);
begin
Clientsocket1.Active := False;
end;
procedure TForm1.Clientsocket1Error(Sender : TObject;
Socket : TCustomWinSocket; ErrorEvent : TErrorEvent;
var ErrorCode : integer);
begin
errorcode := 0;
StatusBar1.SimpleText := 'Hata';
end;
procedure TForm1.Clientsocket1Disconnect(Sender : TObject;
Socket : TCustomWinSocket);
begin
StatusBar1.SimpleText := 'Bağlantı yok';
end;
procedure TForm1.Clientsocket1Connect(Sender : TObject;
Socket : TCustomWinSocket);
begin
StatusBar1.SimpleText := Clientsocket1.Address;
end;
procedure TForm1.Button3Click(Sender : TObject);
var
Text : string;
begin
if checkbox1.Checked = True then
begin
Text := 'gelen1';
Clientsocket1.Socket.SendText(Text);
end;
if Checkbox2.Checked = True then
begin
Text := 'gelen2';
Clientsocket1.Socket.SendText(Text);
end;
end;
procedure TForm1.FormClose(Sender : TObject; var Action : TCloseAction);
begin
Clientsocket1.Active := False;
end;
procedure TForm1.FormDestroy(Sender : TObject);
begin
Clientsocket1.Active := False;
end;
end.
******************************************************************************************************
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, ShellApi;
type
TForm1 = class(TForm)
Label1: TLabel;
Serversocket1: TServerSocket;
procedure FormClose(Sender : TObject; var Action : TCloseAction);
procedure FormDestroy(Sender : TObject);
procedure FormCreate(Sender : TObject);
procedure Serversocket1ClientError(Sender : TObject;
Socket : TCustomWinSocket; ErrorEvent : TErrorEvent;
var ErrorCode : integer);
procedure Serversocket1ClientRead(Sender : TObject;
Socket : TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 : TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender : TObject; var Action : TCloseAction);
begin
Serversocket1.Active := False;
end;
procedure TForm1.FormDestroy(Sender : TObject);
begin
Serversocket1.Active := False;
end;
procedure TForm1.FormCreate(Sender : TObject);
begin
Serversocket1.Active := True;
end;
procedure TForm1.Serversocket1ClientError(Sender : TObject;
Socket : TCustomWinSocket; ErrorEvent : TErrorEvent;
var ErrorCode : integer);
begin
errorcode := 0;
end;
procedure TForm1.Serversocket1ClientRead(Sender : TObject;
Socket : TCustomWinSocket);
var
Text : string;
begin
Text := socket.ReceiveText;
if Text = 'gelen1' then
begin
Label1.caption:='Deneme1';
Serversocket1.Active := False;
Form1.Close;
end;
if Text = 'gelen2' then
begin
Label2.caption:='Deneme2';
Serversocket1.Active := False;
Form1.Close;
end;
end;
end.
-
- Üye
- Mesajlar: 6
- Kayıt: 06 Eyl 2010 12:52
Re: Client-Server - Soru
Bir türlü uyarlayamadım kendi projeme,
Kodları kopyalayıp yeni projelerde çalıştığımda da server'da herhangi bir değişiklik gerçekleşmiyor.
Eğer kaydettiyseniz projeleriyle gönderebilir misiniz çalışır hâlde?
(var kısmında belirlenen değerleri kullanmayı da bilmiyorum bu arada, fazla bir delphi bilgim olduğu söylenemez, sadece basit mantığını biliyorum)
Kodları kopyalayıp yeni projelerde çalıştığımda da server'da herhangi bir değişiklik gerçekleşmiyor.
Eğer kaydettiyseniz projeleriyle gönderebilir misiniz çalışır hâlde?
(var kısmında belirlenen değerleri kullanmayı da bilmiyorum bu arada, fazla bir delphi bilgim olduğu söylenemez, sadece basit mantığını biliyorum)
-
- Üye
- Mesajlar: 6
- Kayıt: 06 Eyl 2010 12:52
Re: Client-Server - Soru
Aslında istediğim tam olarak şu. Farklı yollardan fazla detayına girince kafam karışıyor iyi bilmediğim için.
Client içerisinde 2 tane edit olacak, Server içerisinde de 2 tane label olacak.
Client içerisinden butona basınca edit1 Server'daki label1'de; edit2 de label2'de görünecek.
Benim yaptığım kadarıyla editlerin ikisi de aynı labelde görünüyor.
Veya sadece bir edit bir labelde görünüyor.
Ayrı ayrı işletmeyi yapamadım.
Client içerisinde 2 tane edit olacak, Server içerisinde de 2 tane label olacak.
Client içerisinden butona basınca edit1 Server'daki label1'de; edit2 de label2'de görünecek.
Benim yaptığım kadarıyla editlerin ikisi de aynı labelde görünüyor.
Veya sadece bir edit bir labelde görünüyor.
Ayrı ayrı işletmeyi yapamadım.
Re: Client-Server - Soru
serverin gelen mesajın hangi editten geldiğini bilmesi gerek...
mesajı göndermeden önce önüne hangi editten geldiğini bildirecek ufak bir düzenlemeyle istediğini elde edebilirsin... mesela mesajını editno|mesaj formatında gönderirsen, serverda gelen mesajın başından | işaretine kadar kısmı alır ( pos, copy)
hangi editten geldiğini algılar asıl mesajı yani | işaretinden sonrasını uygun yere yazarsın...
edit: sadece 4 tane edit ve label olacaksa araya işaret koymana da gerek kalmaz mesajı EditNoMesaj şeklinde oluşturursun, serverda gelen mesajın ilk karakterini editno olarak alır işleme devam edersin...
mesajı göndermeden önce önüne hangi editten geldiğini bildirecek ufak bir düzenlemeyle istediğini elde edebilirsin... mesela mesajını editno|mesaj formatında gönderirsen, serverda gelen mesajın başından | işaretine kadar kısmı alır ( pos, copy)
hangi editten geldiğini algılar asıl mesajı yani | işaretinden sonrasını uygun yere yazarsın...
edit: sadece 4 tane edit ve label olacaksa araya işaret koymana da gerek kalmaz mesajı EditNoMesaj şeklinde oluşturursun, serverda gelen mesajın ilk karakterini editno olarak alır işleme devam edersin...
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...
-
- Üye
- Mesajlar: 6
- Kayıt: 06 Eyl 2010 12:52
Re: Client-Server - Soru
dediğiniz mantıkla yapmayı anladım, ama sanırım yapmak istediğim şeyi bu mantığa uydurmam için bundan farklı bir yol izlemem gerek.RamazanG yazdı:mantığı anladıysan gerisi çocuk oyuncağı, port ve host vermeyi unutmayın!!!
çünkü;
client'ten gelen1 yazısı geldiğinde ve server bunu tanıdığında, server'daki label1.caption'da deneme1 yazıyor..
benim istediğim client'teki edit1.text server'daki label1.caption'da
ve client'teki edit2.text server'daki label2.caption'da görünecek.
yani şu yazdığım kodun çalışır hâlde olanı lazım bunu istediğim mantıkta yazdım ama böyle bir kod yok zannımca
label68.caption := socket.ReceiveText(label12.Caption) ;
label69.caption := socket.ReceiveText(label13.Caption) ;
(bu kod server'da yer alıyor, label68 ve 69 server'da, label12 ve 13 client'te... server'daki bu koda, client'teki label i nasıl yol olarak gösterebilirim ki)
-
- Üye
- Mesajlar: 6
- Kayıt: 06 Eyl 2010 12:52
Re: Client-Server - Soru
anlattığınız mantıkta pos özelliğini kullanarak yaptım, client'teki 4 ayrı edit, server'daki 4 ayrı label'de göründü. ama bunu asıl istediğim forma sokamıyorum. istediğim, mesela;)unicorn64 yazdı:serverin gelen mesajın hangi editten geldiğini bilmesi gerek...
mesajı göndermeden önce önüne hangi editten geldiğini bildirecek ufak bir düzenlemeyle istediğini elde edebilirsin... mesela mesajını editno|mesaj formatında gönderirsen, serverda gelen mesajın başından | işaretine kadar kısmı alır ( pos, copy)
hangi editten geldiğini algılar asıl mesajı yani | işaretinden sonrasını uygun yere yazarsın...
edit: sadece 4 tane edit ve label olacaksa araya işaret koymana da gerek kalmaz mesajı EditNoMesaj şeklinde oluşturursun, serverda gelen mesajın ilk karakterini editno olarak alır işleme devam edersin...
Kod: Tümünü seç
client:
edit1 edit2 edit3 edit4
edit5 edit6 edit7 edit8
combobox1 button1
Kod: Tümünü seç
server:
label1 label2 label3 label4
label5 label6 label7 label8
bu şekle bir türlü getiremedim
Re: Client-Server - Soru
baştan ne istediğini tam olarak anlatsan daha iyi olurdu sanırım...
önceki mesajımda gönderdiğim yapı hala geçerli aslında
edit1 den alınıp label1 e yazılacak mesaj -> 1|edit1.text
edit2 den alınıp label2 ye yazılacak mesaj -> 2|edit2.text
edit3 den alınıp label3 e yazılacak mesaj -> 3|edit3.text
edit4 den alınıp label4 e yazılacak mesaj -> 4|edit4.text
edit5 den alınıp label5 e yazılacak mesaj -> 5|edit5.text
edit6 dan alınıp label6 ya yazılacak mesaj -> 6|edit6.text
...
combodan 2 seçiliyse edit5-edit8 arasını gönderirsin...
hatta bu editlerin sayısı bir sonraki mesajında artacaksa şimdiden cevap vermiş olayım...
gidecek mesaj yapısını işe yarar şekilde değiştirelim...
combo 1 ise mesaj -> 1|edit1.text|edit2.text|edit3.text|edit4.text
combo 2 ise mesaj -> 2|edit5.text|edit6.text|edit7.text|edit8.text
......
şeklinde gönderirsin, ama bu sefer pos yeterli olmayacak, uses a idGlobal i ekleyip Fetch komutunu kullanabilirsin...
kodlamada hata olabilir, kopyaladım yapıştırdım çalışmadı demezsin umarım... gerisi sana kalmış...
önceki mesajımda gönderdiğim yapı hala geçerli aslında
edit1 den alınıp label1 e yazılacak mesaj -> 1|edit1.text
edit2 den alınıp label2 ye yazılacak mesaj -> 2|edit2.text
edit3 den alınıp label3 e yazılacak mesaj -> 3|edit3.text
edit4 den alınıp label4 e yazılacak mesaj -> 4|edit4.text
edit5 den alınıp label5 e yazılacak mesaj -> 5|edit5.text
edit6 dan alınıp label6 ya yazılacak mesaj -> 6|edit6.text
...
combodan 2 seçiliyse edit5-edit8 arasını gönderirsin...
hatta bu editlerin sayısı bir sonraki mesajında artacaksa şimdiden cevap vermiş olayım...
gidecek mesaj yapısını işe yarar şekilde değiştirelim...
combo 1 ise mesaj -> 1|edit1.text|edit2.text|edit3.text|edit4.text
combo 2 ise mesaj -> 2|edit5.text|edit6.text|edit7.text|edit8.text
......
şeklinde gönderirsin, ama bu sefer pos yeterli olmayacak, uses a idGlobal i ekleyip Fetch komutunu kullanabilirsin...
Kod: Tümünü seç
uses idGlobal;
var
yer:integer;
deger:array [0..3] of string;
gelendeger:string;
i:integer;
begin
gelendeger:='1|abc|def|ghi|jkl';
yer:=strtoint(fetch(gelendeger,'|'));
for i:=0 to 3 do
deger[i]:=fetch(gelendeger);
case yer of
1:
label1.text:=deger[0]; //abc
label2.text:=deger[1]; //def
label3.text:=deger[2]; //ghi
label4.text:=deger[3]; //jkl
2:
label5.text:=deger[0];
label6.text:=deger[1];
label7.text:=deger[2];
label8.text:=deger[3];
//.............
end;
end;
kodlamada hata olabilir, kopyaladım yapıştırdım çalışmadı demezsin umarım... gerisi sana kalmış...
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...
-
- Üye
- Mesajlar: 6
- Kayıt: 06 Eyl 2010 12:52
Re: Client-Server - Soru
sanırım delphi bilgimin yeterli olmaması sebebiyle bir türlü yapamadım ama çok teşekkürler yardımların içinunicorn64 yazdı:baştan ne istediğini tam olarak anlatsan daha iyi olurdu sanırım...
önceki mesajımda gönderdiğim yapı hala geçerli aslında
edit1 den alınıp label1 e yazılacak mesaj -> 1|edit1.text
edit2 den alınıp label2 ye yazılacak mesaj -> 2|edit2.text
edit3 den alınıp label3 e yazılacak mesaj -> 3|edit3.text
edit4 den alınıp label4 e yazılacak mesaj -> 4|edit4.text
edit5 den alınıp label5 e yazılacak mesaj -> 5|edit5.text
edit6 dan alınıp label6 ya yazılacak mesaj -> 6|edit6.text
...
combodan 2 seçiliyse edit5-edit8 arasını gönderirsin...
hatta bu editlerin sayısı bir sonraki mesajında artacaksa şimdiden cevap vermiş olayım...
gidecek mesaj yapısını işe yarar şekilde değiştirelim...
combo 1 ise mesaj -> 1|edit1.text|edit2.text|edit3.text|edit4.text
combo 2 ise mesaj -> 2|edit5.text|edit6.text|edit7.text|edit8.text
......
şeklinde gönderirsin, ama bu sefer pos yeterli olmayacak, uses a idGlobal i ekleyip Fetch komutunu kullanabilirsin...
.
çalışan bir proje bulmaya çalışıp uygulamalı olarak görmeyi deneyeceğim
Re: Client-Server - Soru
amacın öğrenmek mi yoksa bir işle mi uğraşıyorsun?
öğrenmek ise, tabiri caizse emeklemeden koşmaya çalışıyorsun gibime geldi, bence önce eline bir kitap alıp temelden öğrensen daha iyi edersin... forumdan soru cevapla öğrenmek imkansız demiyorum ama zor, o anki problemi çözecek kadar öğrenirsin sadece...
bu arada son gönderdiğim mesajda nereyi anlamadın, neyi yapamadın, takıldığın yeri söylersen yardımcı olmaya çalışayım. istersen kodlarını yaz buraya üzerinden konuşalım...
öğrenmek ise, tabiri caizse emeklemeden koşmaya çalışıyorsun gibime geldi, bence önce eline bir kitap alıp temelden öğrensen daha iyi edersin... forumdan soru cevapla öğrenmek imkansız demiyorum ama zor, o anki problemi çözecek kadar öğrenirsin sadece...
bu arada son gönderdiğim mesajda nereyi anlamadın, neyi yapamadın, takıldığın yeri söylersen yardımcı olmaya çalışayım. istersen kodlarını yaz buraya üzerinden konuşalım...
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...