【问题标题】:Using socket API on IPhone在 iPhone 上使用套接字 API
【发布时间】:2012-10-12 03:38:50
【问题描述】:

对于一个小项目,我必须在我的 iPhone 上完成以下任务:

  • 打开一个 TCP 套接字
  • 向服务器发送命令
  • 关闭连接的 WRITE 部分
  • 从服务器读取响应
  • 关闭连接

我对套接字编程没有经验 - 我刚刚开始使用网络编程,并且已经使用过CFStream 接口。但显然流不足以完成这项任务。

谁能指出我正确的方向?我试图在 Apples 网站上找到有关套接字的教程,但什么都没有。

【问题讨论】:

    标签: iphone objective-c sockets


    【解决方案1】:

    看看 CoreFoundation 的CFSocket。您可以轻松地将其集成到应用程序的运行循环中,因此不会出现线程问题。这个免费的book excerpt 向您展示了如何使用它。

    CFSocket 是一个 bsd 套接字的包装器,如果您需要设置特殊的套接字选项(例如多播),它可以让您访问原始套接字句柄。

    如果您愿意使用 3rd-party 库,CocoaAsyncSocket 似乎是一个不错的解决方案(自己从未尝试过)。

    【讨论】:

      【解决方案2】:

      我不是 iPhone 开发人员,但我对你的问题很好奇,所以我四处看看。

      我找到了这个页面:Sockets on iPhone

      代码如下:

      - (void)sendcmd:(NSString*)cmd {
      
          NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
          NSString *hostname= [defaults stringForKey:@"hostname"];
      
          NSHost *host=[NSHost hostWithName:hostname];
      
          if (host) {
      
              struct sockaddr_in addr;
              int sockfd;
      
              // Create a socket
              sockfd = socket( AF_INET, SOCK_STREAM, 0 );
      
              addr.sin_family = AF_INET;
              addr.sin_addr.s_addr = inet_addr([[host address] UTF8String]);
              addr.sin_port = htons( 2001 );
      
              int conn = connect(sockfd, &addr, sizeof(addr)); 
      
              if (!conn) {
      
                  NSData* data = [cmd dataUsingEncoding:NSISOLatin1StringEncoding];
      
                  ssize_t datasend = send(sockfd, [data bytes], [data length], 0);
                  datasend++;
      
                  //ssize_t   send(int, const void *, size_t, int) __DARWIN_ALIAS_C(send);
      
                  close(sockfd);
      
              } else {
                  // create a popup here!
      
                  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[@"Connection failed to host " stringByAppendingString:hostname] message:@"Please check the hostname in the preferences." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                  [alert show];
                  [alert release];
              }
      
          } else {
      
              UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[@"Could not look up host " stringByAppendingString:hostname] message:@"Please check the hostname in the preferences." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
              [alert show];
              [alert release];
          }
      
      }
      

      一张海报继续推荐这个图书馆:entropydb - SocketWrapper

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多