使用Ray Wunderlich的Server示例建立套接字连接Iphone

时间:2012-03-28 19:36:10

标签: iphone

http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server

从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()

然后在他的iPhone上

- (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方面它是如何知道localhost是什么的? 我可以从计算机本身了解它知道什么是localhost,但是在Iphone设备上,(不是计算机中的模拟器所以它应该知道localhost)。 实际的Iphone如何知道'localhost'??

3 个答案:

答案 0 :(得分:1)

我猜这段代码不是要在模拟器中运行以外的任何地方运行。它会工作,因为'localhost'实际上运行python-server的计算机。在真实设备上,“localhost”(或127.0.0.1)将始终引用设备本身。您必须将localhost更改为python-server的ip / hostname才能使其在真实设备上运行。

答案 1 :(得分:0)

尝试将127.0.0.1作为ip放置。这是环回IP。

但是你使用iphone作为python服务器?将套接字与主机配对时,它是远程主机。您应该将服务器地址和端口放在配对功能而不是localhost。

答案 2 :(得分:0)

如果你在模拟器上运行这个,那么你必须写localhost这意味着环回地址 127.0.0.1 但你在iphone设备上安装这个程序然后你不得不给localhost而不是localhost运行服务器的系统的 IP地址