2012-03-28 45 views
0

http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server建立與服務器的例子套接字連接iPhone雷德奇

從Python服務器端

 from twisted.internet.protocol import Factory, Protocol 

    from twisted.internet import reactor 


    class IphoneChat(Protocol): 
def connectionMade(self): 
    print "a client connected" 


factory = Factory() 
factory.protocol = IphoneChat 
reactor.listenTCP(80, factory) 
print "Iphone Chat server started" 
reactor.run() 

然後他有

- (void) initNetworkCommunication { 

CFReadStreamRef readStream; 
CFWriteStreamRef writeStream; 
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 80, &readStream, &writeStream); 

inputStream = (NSInputStream *)readStream; 
outputStream = (NSOutputStream *)writeStream; 
[inputStream setDelegate:self]; 
[outputStream setDelegate:self]; 
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 



[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[inputStream open]; 
[outputStream open]; 

}

現在我的問題來自Iphone方面,它如何知道什麼是localh ost是? 我可以從計算機本身瞭解它知道什麼是本地主機,但在Iphone設備上(不是計算機中的模擬器,所以它應該知道本地主機)。 實際的Iphone如何知道'localhost'?

+0

你在iphone裏面運行一個python服務器嗎?怎麼樣??? – 2012-03-28 19:44:35

+0

我不希望代碼能夠在真實設備上工作,除非'localhost'被替換爲運行python腳本的服務器的主機名/ IP。 – 2012-03-28 19:45:47

+0

python服務器是計算機。 Iphone是試圖連接到它的設備。如果他在模擬器上運行應用程序,那麼服務器和設備都是相同的。 – lilzz 2012-03-28 19:50:50

回答

1

我想這段代碼並不是要在模擬器中的其他地方運行。在那裏它會工作,因爲'本地主機'實際上運行python服務器的計算機。在真實設備的「localhost」(或127.0.0.1)上將始終引用設備本身。您必須將localhost更改爲python-server的ip/hostname才能使其在真實設備上工作。

0

嘗試將127.0.0.1作爲IP。這是環回IP。

但是你使用iphone作爲python服務器?當你將套接字與主機配對時,它就是遠程主機。您應該將服務器地址和端口置於配對功能而不是本地主機。

0

如果u在模擬器上運行這個然後我只好寫這意味着環回地址是127.0.0.1 üID iPhone設備上安裝該程序,然後,而不是你的localhost給IP地址的本地主機您的系統的服務器正在運行的

+0

請寫出完整的單詞,所以沒有'你'等。 – lpapp 2014-01-24 07:24:34

相關問題