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'??
答案 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地址。