2

我已经使用 TCP 套接字成功地从 iPhone 连接到服务器(这是一台 Windows 机器)。目前,我正在使用一个按钮来执行以下代码:

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 库来打开我的 Sockets 连接。谢谢您的帮助!

* 编辑 *

根据下面的答案,这就是我到目前为止所做的:

套接字连接.h

#import <Foundation/Foundation.h>

@interface SocketConnection : NSObject
{

}

+ (SocketConnection *)getInstance;

@end

套接字连接.m

静态 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

我还没有弄清楚单例类是如何被调用的。我使用上面的代码启动了我的应用程序,但它没有连接到服务器。有任何想法吗?

谢谢!

4

1 回答 1

4

您应该创建一个单例类来保持您的连接,如下面的代码:

h 文件:

#import <Foundation/Foundation.h>
    @interface SocketConnection : NSObject
    {
    }

     + (SocketConnection *)getInstance;

    @end;

.m 文件:

#import "SocketConnection.h"

static SocketConnection *sharedInstance = nil;

@implementation SocketConnection

- (id)init
{
    self = [super init];

    if (self) {
    }
    return self;
}

+ (SocketConnection *)getInstance
{
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [[SocketConnection alloc] init];
        }
    }
    return sharedInstance;
}

@end;
于 2012-06-01T14:55:07.280 回答