2011-08-12 23 views
9

Bir klasörü izleyen, eklendikçe dosyaları değiştiren ve neler olduğuna dair basit bir ilerleme sağlayan oldukça basit bir program geliştirdim. Klasör, NSNlication içindeki bilgileri NSNotificationCenter aracılığıyla ilerleme görünümüme geçiren bir NSOperation alt sınıfı aracılığıyla izlenir.Kakao'da Sunucu/İstemci uygulaması oluşturma

Artık işlerimi kesmem ve sunucumda izlenen klasör/işlem bölümünü çalıştırmam ve birden çok iş istasyonundan gelen ilerlemeyi izlemek için bir istemci oluşturmam gerekiyor. Benim sorunum, bunu nasıl yapacağımı bilmiyorum ve aramalarım bana gerçekten yardım etmiyor.

Çok eski tarihli çözümler (WebObjects, Taşınabilir Dağıtılmış Nesneler) veya eksik bilgiler alıyorum. NSStream'i veriyi ileri ve geri iletmek için kullanmak istiyorum gibi görünüyor, ancak NSStream'de bulduğum her şey istemci tarafı için ayarlanmış gibi görünüyor çünkü bir IP adresi arıyor. Hem bir sunucu hem de ona bağlanmak için bir istemci kurmanın en iyi yolu ne olurdu?

cevap

6

Böyle bir şey için TCP kullanmanızı öneririm. Bu yazılımı BSD için yazdığınızdan (Mac OS X ve iPhone'un her ikisi de BSD), BSD C soketlerini veya bunun için bir Objective-C sargısını kullanabilirsiniz. Bir müşteri için iyi bir kütüphane CocoaAsyncSocket. Kişisel olarak, SocketKit adlı TCP ağ iletişimi için hafif bir Objective-C soket sınıfı yazdım. Tabii

SKTCPSocket * aSocket = nil; 
SKTCPSocketServer * server = [[SKTCPSocketServer alloc] initListeningOnPort:1337]; 
@try { 
    [server listen]; 
    while ((aSocket = (SKTCPSocket *)[server acceptConnection]) != nil) { 
     // do something with aSocket 
     [aSocket close]; 
    } 
} @catch (NSException * e) { 
    NSLog(@"Exception : %@", e); 
} 
[server stopServer]; 
[server release]; 

TCP soketleri kendi ağ protokolünü yazma vasıtalarının kullanılması: Bir sunucu açısından bakıldığında

// open a connection 
SKTCPSocket * socket = [[SKTCPSocket alloc] initWithRemoteHost:@"SERVER_IP" port:SERVER_PORT]; 
// write data 
[socket writeData:someData]; 
// read data 
NSData * someData = [socket readData:4]; 
// close the socket 
[socket close]; 
[socket release]; 

Eğer SKTCPSocketServer sınıfını kullanarak bir bağlantı noktası üzerinde dinleyebilirsiniz şu şekildedir: Bu kütüphanenin kullanımı şeydir . Basit bir örnek, bir dört baytlık uzunluk alanı gönderir, ardından bir NSDictionary'ın verileri veya bu nitelikteki bir şey gelir. Bu, çok basit bir Dağıtılmış Nesneler sistemine benzer bir şeyi başarmanıza izin verebilir.

+0

Son birkaç gündür bu sorudan ayrılmak istemediniz. Sadece meşgul ve bu projeye geri dönmediniz. Bilgi için teşekkürler Ben CocoaAsyncSocket ve SocketKit bir göz atacağım, bu aradığım şey gibi geliyor. – Kris

+0

CocoaAsyncSocket ihtiyacım olan şey olduğu ortaya çıktı. Olaylar gerçekleştikçe bağlı sokete veri almakta biraz sorun yaşıyorum ... Ama şu anda bağlantıda bir ilk okumaya başladım, bu yüzden belgelerin içinde kaçırdığım bir şey olduğundan eminim. Tekrar teşekkürler! – Kris

4

Sıfır yapılandırma ağ iletişimi için neden Bonjour'a bir göz atmıyorsunuz (yani sunucunuzun IP adresini bulmak zorunda değilsiniz)?

Bonjour ayrıca Windows ve iOS (iPhone/iPad) üzerinde de desteklendiğinden, uygulamanızı çoklu platform (ör. Windows ve Mac istemcisinde sunucu veya tam tersi) yapabilir veya iPhone'unuzun bir istemci olarak hareket etmesini sağlayabilirsiniz. sunucu (bu sizin durumunuzda mantıklı olup olmadığını bilmiyorum ama sadece öneriyorum).

0

Bu maalesef, Kakaonun oldukça zayıf olduğu bir yer. WebObjects (Apple) hakkında unutun. Dağıtılmış Nesneleri muhtemelen unutmalısınız. Mac'de gerçek bir istemci/sunucu çözümü yoktur. iOS'un bazı eşler arası eşyalar vardır, ancak istemci/sunucu için hala işe yaramaz.

Benim önerim basit bir REST API'sini kullanmaktır. Sunucunuzu cocoahttpserver ile oluşturun. Müşterinizi NSURLConnection veya ASIHTTPRequest ile oluşturun. Basit tut. Protokol için JSON'u severim. YAJL benim için iyi çalıştı, ama gerçekten basit bir şey için birçok seçenek var.

İlgili konular