我已成功地使用TCP套接字从iPhone连接到服务器(这是一台Windows机器)。目前,我使用一个按钮来执行以下代码:创建一个TCP套接字连接并保持连接在多个视图中打开
while(1)
{
Socket *socket;
int port = 11005;
NSString *host = @"9.5.3.63";
socket = [Socket socket];
@try
{
NSMutableData *data;
[socket connectToHostName:host port:port];
[socket readData:data];
// [socket writeString:@"Hello World!"];
//** Connection was successful **//
[socket retain]; // Must retain if want to use out of this action block.
}
@catch (NSException* exception)
{
NSString *errMsg = [NSString stringWithFormat:@"%@",[exception reason]];
NSLog(errMsg);
socket = nil;
}
}
这是比较容易的部分......我想尽快建立套接字连接的应用程序加载。我试着把这段代码放在我的viewDidLoad中,但循环是无限的,视图永远不会加载。我在我的项目中有几个视图,我想打开连接,在所有视图中始终打开连接。
目的:
- 打开TCP套接字连接时,应用程序首次加载
- 保持连接无限,无论我在(在项目中的多个视图)
我还是什么看法对于iOS开发来说很新颖,所以我尽可能多地理解它。应该指出,我正在使用SmallSockets库来打开我的套接字连接。谢谢您的帮助!
*编辑*
基于关闭下面的答案,这是我走到这一步,打算:
SocketConnection.h
#import <Foundation/Foundation.h>
@interface SocketConnection : NSObject
{
}
+ (SocketConnection *)getInstance;
@end
SocketConnection.m
static SocketConnection * sharedInstance = nil;
@implementation SocketConnection
- (id)init
{
self = [super init];
if (self)
{
while(1)
{
Socket *socket;
int port = 11005;
NSString *host = @"9.5.3.63";
socket = [Socket socket];
@try
{
NSMutableData *data;
[socket connectToHostName:host port:port];
[socket readData:data];
// [socket writeString:@"Hello World!"];
//** Connection was successful **//
[socket retain]; // Must retain if want to use out of this action block.
}
@catch (NSException* exception)
{
NSString *errMsg = [NSString stringWithFormat:@"%@",[exception reason]];
NSLog(errMsg);
socket = nil;
}
}
}
return self;
}
+ (SocketConnection *)getInstance
{
@synchronized(self)
{
if (sharedInstance == nil)
{
sharedInstance = [[SocketConnection alloc] init];
}
}
return sharedInstance;
}
@end
我还没有想出如何调用singleton类。我用上面的代码启动了我的应用程序,并且它没有连接到服务器。有任何想法吗?
谢谢!
你可能会想创建一个单独的类(也许称为'connectionKeeper'或其他),并在'appDelegate'中启动它''applicationDidF inishLachingching:withOptions:'。 TCP连接与视图控制器的视图无关,所以你应该保持独立。 –
将代码移动到singlton类或appdelegate –
如果我创建了一个单独的类,那么类“调用”在哪里,以便套接字连接变为打开并保持打开状态? – Skizz