【问题标题】:Objective-C Sockets Send and Receive on iOSiOS 上的 Objective-C 套接字发送和接收
【发布时间】:2016-11-25 07:40:33
【问题描述】:

我是 Objective-C 的新手,想在我正在开发的 iOS 应用程序和我的 Python 3 套接字服务器(可以工作)之间进行通信。问题是我不知道如何在 Objective-C 中使用套接字,也不知道在 Xcode 8 中安装库时从哪里开始。现在我只想能够将数据发送到服务器并收到回复在 iOS 设备上。我已经看过 sys.socket.h 但是我不知道如何使用它,非常感谢任何帮助。

谢谢!

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    几年前我用过SocketRocket。我正在从我的旧项目中发布它的一些代码。我不知道这是否仍然有效,但您可能会想到使用它。

    1. 连接到服务器

    NSMutableURLRequest *pushServerRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"ws://192.168.1.1"]]; [pushServerRequest setValue:@"WebSocket" forHTTPHeaderField:@"Upgrade"]; [pushServerRequest setValue:@"Upgrade" forHTTPHeaderField:@"Connection"]; [pushServerRequest setValue:"somekey" forHTTPHeaderField:@"Sec-WebSocket-Protocol"]; SRWebSocket *wsmain = [[SRWebSocket alloc] initWithURLRequest:pushServerRequest]; //Declare this as a global variable in a header file wsmain.delegate=self; [wsmain open];

    1. 委托方法

    -(void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message { NSLog(@"Message %@",message); } - (void)webSocketDidOpen:(SRWebSocket *)webSocket { NSLog(@"Connected"); }

    1. 发送命令

      [wsmain send:commands];

    通过发送命令,您将收到didReceiveMessage方法的响应。

    【讨论】:

    • 谢谢,你用什么事件来捕获服务器端的数据?我正在为节点使用 WebSocket,监听“消息”事件但没有看到任何东西,数据应该通过
    【解决方案2】:

    你见过https://github.com/robbiehanson/CocoaAsyncSocket吗? 使用socket很简单

    NSString *host = @"10.70.0.22";
    int port = 1212;
    
    _socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
    
    NSError *error = nil;
    [_socket connectToHost:host onPort:port error:&error];
    if (error) {
        NSLog(@"%@",error);
    }
    

    委托

    -(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{
    NSLog(@"success");
    }
    -(void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{
    if (err) {
        NSLog(@"error %@",err);
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self connectToServer];
        });
    }else{
        NSLog(@"disconnect");
    }
    

    }

    【讨论】:

    • 好的,我想我已经成功安装了这个库。如何在不需要代码页的情况下与我的 python 服务器进行通信,我只想在新的 ViewController.m 文件中执行此操作。谢谢!
    • 您好,感谢您的回复。最后我使用了 Swift 3 并使用了 SwiftSockets,它现在可以很好地与我的 python 服务器一起使用,并且可以将我需要的请求发送到
    【解决方案3】:

    另一个选项是socket.io。它有服务器库和一个用 Swift 编写的 iOS 客户端库。它的API相当广泛。

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 2016-07-28
      • 2010-11-14
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2016-02-21
      • 2014-07-31
      相关资源
      最近更新 更多