2016-03-28 23 views
0

Sorunu uzun bir süre çözmeye çalıştım ve sonunda uzmanlardan yardım almaya karar verdim. Soket Programlama kullanarak Sunucu-istemci uygulamasını geliştirdim ve istemcim Sunucuya başarılı bir şekilde bağlanabiliyor. Şimdi istemciden gelen istek üzerine sunucudan soket üzerinden sunucuya göndermeye çalışıyorum, sunucum istekleri yakalayabiliyor ancak sunucu tarafından gönderilen yanıt (writeObject (...)) istemciye ulaşamıyor .

Sunucu kod parçacığı:İstemci İstemci Nesnesi Java tarafından ObjectStream üzerinde Java tarafından gönderilmiyor

ServerSocket sSocket = new ServerSocket(socketNumber); 
ArrayList<LoginPassword> logIn = new ArrayList<>(); 
Socket cSocket = sSocket.accept(); 
ObjectOutputStream outputStream = new ObjectOutputStream(cSocket.getOutputStream()); 
outputStream.flush(); 
ObjectInputStream inputStream = new ObjectInputStream(cSocket.getInputStream()); 
LoginPassword lp1 = new LoginPassword("admin","admin"); 
logIn.add(lp1); 
outputStream.writeObject(logIn); 
outputStream.flush(); 

Clinet kodu Parçacığı: o gönderilen verileri algılamak mümkün değildir çünkü Benim durumumda

Socket client = new Socket(InetAddress.getLocalHost(),socketNumber); 
ArrayList<LoginPassword> myList = new ArrayList<>(); 
ObjectOutputStream outputStream = new ObjectOutputStream(client.getOutputStream()); 
outputStream.flush(); 
ObjectInputStream inputStream = new ObjectInputStream(client.getInputStream()); 
//Wait untill the data is available 
myList = (ArrayList<LoginPassword>) inputStream.readObject(); 

, müşteriler readObject() asla denir Server.Any yardım lütfen.

+0

Hiçbir şey okumadığınız için bir InputStream'i sunucuda açıyorsunuz. İstemci için aynı: neden bir şey yazmıyorsunuz, neden bir OutputStream açıyorsunuz? –

+0

Bu benim sorunumu açıklamak için bir kod parçacığı, uygulama çalışırken verileri ileri geri göndermek için hem istemci hem de sunucu tarafında inputStream ve OutputStream kullanıyorum. – Rambo772

+0

Önce onları kaldırın ve kodunuzun düzgün çalışması gerekir. Ardından onları yeniden verin, ancak doğru sırada önce okuyan istemci önce giriş akışını açmalı, okuyup yazmalıdır. İlk önce yazan sunucu, önce çıkış akışını açmalı, yazmalı ve daha sonra giriş akışını açmalıdır. –

cevap

0

Önce her iki ucunda ObjectOutputStream'u oluşturmanız gerekir. Diğer olarak, ObjectInputStream'u yaratan bir kilitlenme alırsınız.

Alternatif aşağıdaki yorumun anlamı nedir merak olurdu:

// Wait untill the data is available 

bu available() çağıran kodu eksik bir parça gösteriyorsa, sadece silin. readObject(), tam gerektiği kadar engellenir. available()'un az sayıda doğru kullanımı var ve bunlardan biri değil.

+0

OMG bu harika. İletiyi beklediğim() mesajını kaldırdığımda ve doğrudan readObject() olarak adlandırdığımda mükemmel çalıştı. Şimdi, bu uygulamadan sonra aklımda bir soru daha var, eğer bunu yaparsam yanıt alınamayana kadar engellenir fakat programımda bazen veri yanıt vermezse sunucu cevap vermiyor, nasıl devam edebilirim? bekleme süresinden sonra readObject()? – Rambo772

+0

Socket.setSoTImeout() 'ile bir zaman aşımı ayarlayın ve sonuçların ortaya çıktığı SocketTimeoutException değerini yakalayın. – EJP

+0

Çok teşekkür ederim @EJP, test ettim ve bir çekicilik gibi çalışıyor. Gerçekten yardımın için teşekkürler. – Rambo772

İlgili konular