菜鸟教程小白 发表于 2022-12-12 21:13:56

iphone - 创建 TCP 套接字连接并在多个 View 中保持连接打开


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

<pre><code>while(1)
{
    Socket *socket;
    int port = 11005;
    NSString *host = @&#34;9.5.3.63&#34;;

    socket = ;

    @try
    {
      NSMutableData *data;
      ;
      ;
      //;

      //** Connection was successful **//
      ; // Must retain if want to use out of this action block.
    }
    @catch (NSException* exception)
    {
      NSString *errMsg = ];
      NSLog(errMsg);
      socket = nil;
    }
}
</code></pre>

<p>这是最简单的部分...我正在尝试在应用程序加载后立即建立套接字连接。我尝试将此代码放在我的 viewDidLoad 中,但循环是无限的,并且 View 永远不会加载。我的项目中有几个 View ,我想打开连接,在所有 View 中始终保持连接打开。</p>

<p>目标:</p>

<ul>
<li>在应用首次加载时打开 TCP 套接字连接</li>
<li>无论我在什么 View 中,都可以无限地保持连接(项目中的多个 View )</li>
</ul>

<p>我对 iOS 开发还是比较陌生,所以我希望尽可能清晰。应该注意的是,我正在使用 SmallSockets 库来打开我的 Sockets 连接。感谢您的帮助!</p>

<p><strong>* 编辑 *</strong></p>

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

<p>SocketConnection.h</p>

<pre><code>#import &lt;Foundation/Foundation.h&gt;

@interface SocketConnection : NSObject
{

}

+ (SocketConnection *)getInstance;

@end
</code></pre>

<p>SocketConnection.m</p>

<p>静态 SocketConnection *sharedInstance = nil;</p>

<pre><code>@implementation SocketConnection

- (id)init
{
    self = ;

    if (self)
    {
      while(1)
      {
            Socket *socket;
            int port = 11005;
            NSString *host = @&#34;9.5.3.63&#34;;

            socket = ;

            @try
            {
                NSMutableData *data;
                ;
                ;
                //;

                //** Connection was successful **//
                ; // Must retain if want to use out of this action block.
            }
            @catch (NSException* exception)
            {
                NSString *errMsg = ];
                NSLog(errMsg);
                socket = nil;
            }
      }
    }
    return self;
}

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

@end
</code></pre>

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

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你应该创建一个单例类来保持你的连接,就像下面的代码:</p>

<p><strong>h 文件:</strong></p>

<pre><code>#import &lt;Foundation/Foundation.h&gt;
    @interface SocketConnection : NSObject
    {
    }

   + (SocketConnection *)getInstance;

    @end;
</code></pre>

<p><strong>m 文件:</strong></p>

<pre><code>#import &#34;SocketConnection.h&#34;

static SocketConnection *sharedInstance = nil;

@implementation SocketConnection

- (id)init
{
    self = ;

    if (self) {
    }
    return self;
}

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

@end;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 创建 TCP 套接字连接并在多个 View 中保持连接打开,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10850965/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10850965/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 创建 TCP 套接字连接并在多个 View 中保持连接打开