Merhaba,

Java'da yazmış olduğum bir uygulama sunucusu için yine java ile bir
client geliştiriyorum.

client iki ayrı thread dan oluşuyor. kabaca threadA gui, threadB
socket dinleycisi.

threadA üzerinde bir buton a basıldığında;

// this.writer = new PrintWriter(this.sock.getOutputStream());
synchronized(this.writer){
    this.writer.println("LOGIN -u " + username + " -p " + password);
}

şeklinde bir komut parçası çalışıyor. dolayısı ile yukarıdaki kod
parçası threadA tarafından koşturuluyor.
bu arada threadB int bLen = this.sock.read(data) gibi bir komutla
gelen veriyi bloklanmış olarak bekliyor.

ancak tasarladığım protokole göre, client LOGIN mesajını gönderince
sunucu bir cevap yolluyor.

gelen tüm veriyi yukarıda da belirttiğim gibi threadB, run
prosedüründe int bLen = this.sock.read(data) gibi bir komutla okuyor.

ben login mesajını gönderince threadA daki aynı yordam içerisinde
gelen cevabı beklemeye başlamak istiyorum. yani threadB nin run
yordamındaki, threadB yi bloklayan read komutunu devre dışı bırakıp
threadA içerisinde, threadA yı bloklayarak LOGIN komutunu göndermek ve
gelen mesajı threadA dan okumak istiyorum. okumam bittiğinde threadB
nin okumaya devam etmesini istiyorum.

threadB nin, threadA okuma yapmadığı zaman socketi sürekli okuması
gerekiyor çünkü sunucu belirsiz zamanlarda data gönderiyor ve threadB
bu datayı alıp işlemesi için (tamamen konu dışı olan) threadC ye
veriyor.

temel bir "çok kanallı socket programalama" problemi olduğunu sanıyor,
cevabın basit olduğunu ancak kafam durduğu için işin içinden
çıkamadığımı düşünüyorum :)

biraz karışık gibi oldu ama olabildiğince basite indirgemeye çalıştım.
_______________________________________________
Linux-programlama mailing list
[email protected]
http://liste.linux.org.tr/mailman/listinfo/linux-programlama

Cevap