merhaba
clientten koltuk listesi için butona basınca listenin serverdan clientteki listboxa gelmesi gerekiyor ama gelmiyor acaba nerede hata yapıyorum.yardımcı olabilirseniz çok sevinirim
clientteki butondaki kod
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s:string;
i,kn:integer;
begin
s:=socket.receivetext;
if copy(s,1,4)='msg:' then
label1.caption:=s;
if s='koltuk listesi' then
begin
label1.caption:='boş koltuk listesi gönderiliyor';
serversocket1.socket.connections[0].sendtext('liste başı');
exit;
for i:=0 to listbox1.items.count-1 do
begin
//if strtointdef(listbox1.items[i],0) >0 then
serversocket1.socket.connections[0].sendtext(inttostr(i+1)+#13#10);
end;
serversocket1.socket.connections[0].sendtext('liste sonu');
label1.caption:='boş koltuk listesi gönderildi';
end;
if copy(s,1,8)='satıldı:' then
begin
kn:=strtoint(copy(s,9,length(s)-8));
listbox1.items[kn-1]:='satıldı'+inttostr(kn)+'kime:'+socket.remoteaddress;
label1.caption:=inttostr(kn)+'nolu koltuk'+socket.remoteaddress+'adresıne satıldı';
end;
end;
If a=1 Then
begin
For i:=1 to 10 Do
begin
Label1.Caption:=inttostr(i);
end;
end;
gibi...
bi sınavda sırf böyle kodlama yazdığım için kod yanlış olmasına rağmen 20 puanlık sorudan 10 puan almıştım, çünkü sınıfta böyle blok halinde kod yazan sadece ben varmışım
Kardeş 2 sebep var.
1-ordaki exit nedeniyle For döngüsü işlemiyor.
2-exit'i kaldırsan da, client'den 'Devam et' mesajını beklemediğin için sorun çıkartabilir. Client-Socket bağlantısında (nedense) ard arda bi şey gönderirken 'devam et' gibi bir msj beklemelisin.
ulu coder'in dedikleri doğru. 2. madde doğru değil:) Socketlerde Read eventi, Buffer nil'den farklı olduğu zaman çalışır. Buffer'ın nilden farklı olması için de bufferın tamamının okunması gerekir. Aksi takdirde ne kadar veri gönderirsen gönder event tetiklenmeyecektir. ulu coder'in bahsettiği aslında bu. Ama bu senin karşılaştığın sorun değil.
Senin kodları temel alarak kodu çalışır hale getirdim. Eğer Client Socket'e de okuma yaptırırsan ve Exit satırını silecek olursan sorun çıkmayacaktır. Ama sana gelen veri ne kadar işini görür onu bilmiyorum, çünkü gelen text tek bir parça halinde. Senin onu parçalaman vs gerekiyor.
Bir de ufak tavsiye. Mümkün olduğu kadar indent (tab) kullan ve ulu coder'in dediği gibi Begin End bloklamasını örnekteki gibi yap. Ayrıca bileşenlere de görevlerine göre isim ver. Örneğin Button1 yerine btnGonder gibi. Bu hem kodlamanı hızlandıracak, hem de kodu okurken çok daha rahat edeceksin.
Bir de eğer projen çok acele değilse, ulu coder'in verdiği linke birşeyler yazdım. İlgini çekebilir. Senin yerinde olsam, orada yazan ipucunu kurcalar ve adam gibi bir protokol yazardım.
ikincisinin yanlış olduğuna emin misiniz?
Basit bir while-do döngüsüyle dosyayı 2KB'lık parçalar halinde, 'Devam et' mesajını beklemeden ard arda göndersek, ver kayıplarına yol açmaz mıyız?