2012-10-09 35 views
9

soket okuma ve yazma çok basit bir yuva programı yazmaya çalışıyorum, temelde istediğim, istemcinin sunucudan bir süre (gerçek) döngüde iletişim dinlemeye devam etmesidir. şimdi de istemcinin, ara vermeden ortadaki sunucuya bazı verileri geri gönderebilmesini istiyorum.Aynı anda

Düşünebildiğim tek çözüm, yazmak ve yazmak için bir iş parçacığı yapmak ve her zaman yazmak zorunda olduğum okuma iş parçacığını kesmektir.

daha iyi bir çözüm yoktur veya bu ben bu

+1

Lütfen çalışmanız hakkında daha fazla ayrıntı sağlamak için gönderinizi düzenleyin. Ne denedin? Ne araştırma yaptın? Hangi kod çalışmıyor? – Gray

+1

Sadece bir sorun değil - bkz. @CrazyCasta yanıtı. Tx/rx akışları bağımsızdır ve başka bir kaynaktan yazılırken bir iş parçacığından okunur. –

+0

R/W, aynı anda TCP'nin bulunduğu Tam dupleks'in tanımıdır. – irreputable

cevap

6

İki konuları kullanabilirsiniz yapabileceği tek yoludur. Okumak ve yazmak için bir tane. Bu şekilde yazma iş parçacığı, istediği zaman yazabilir (okumayı durdurmaya gerek yoktur).

Bunu yapmanın başka bir yolu, okunmadan önce sokete setSoTimeout(timeoutMs) kullanmaktır. Bu, SocketTimeoutException değerini zaman aşımının milisaniye olarak okunmasından daha uzun sürerse, bu şekilde yazmanızı sağlar.

+1

Bunu zaman aşımından ayrı kabul ediyorum. Neden bunu istiyorsun? Yine de yazabilirsiniz. –

+0

@TobiasRitzau İki yerine bir iş parçacığı kullanmanızı sağlar. OP'nin ne yapmaya çalıştığını tam olarak bilmiyorum, bu yüzden başka bir seçenek ekledim. – CrazyCasta

+2

Bundan kaynaklanan bazı ciddi senkronizasyon sorunları var. Ve zaman aşımı yaparsan, soket kapalı mı yoksa bir şey mi özlüyorum? –

-1

İki farklı bağlantı noktasını, birini dinlemek için ve bir tane yazmak için kullanabilirsiniz. ve işlemleri yapmak için farklı iş parçacıkları kullanın, sonra siz (gerçek) döngü bir sorun yaratmayacaksınız.

+2

Bu bir soketin yaptığı şey ... Tam dubleks zaten destekliyor. –

0

FTP protokolü özelliklerine bakın. İki soket/kanal kullanarak, bir tanesi komutlar için, diğeri ise veri için ne yapmak istediğinizi yapar.

+1

Bu gerekli değildir. Bir soket iki ayrı kanaldan göndermek ve almak için yeterlidir. –

İlgili konular