【问题标题】:Iphone listen a tcp portiphone监听一个tcp端口
【发布时间】:2012-06-13 08:49:05
【问题描述】:

我从其他类似问题的答案中阅读了一些建议的链接。 Article1Library1Another SO Question。但是,我无法弄清楚如何执行以下应用程序。

基本上,我向 Iphone 的 IP 和选定的端口(比如说端口:2020)发送一个字符串。我想在 Iphone 的 UI 上显示这个字符串。所以,让我们检查以下示例代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSString* str;
    while(true)
    {
         str = ReadLineFromPort(2020);
         myLabel.text = str;
    }
}

我希望ReadLineFromPort() 方法具有以下职责:

阅读直到你看到换行符(即'\n'),当你看到换行符时返回字符串。 (类似于C# StreamReader.Readline method。)

任何帮助将不胜感激。由于我不是专业的 IOS 开发人员,但我需要一个基本的。

【问题讨论】:

    标签: ios tcp port


    【解决方案1】:

    监听某个 TCP 端口确实需要设置一些东西。

    一个不错的选择是使用 Robbie Hanson 的CocoaAsyncSocket

    您会在此处找到 Echo Server 的示例(在 RunLoop/XCode/EchoServer 中。

    没错,这个 XCode 项目是为 OSX 生成的,但您可以简单地创建一个 清空 iOS 项目并复制粘贴大部分代码。

    虽然没有“读取直到中断”功能 - 但它很简单 足以在复制数据到接收缓冲区时实现。

    编辑:

    您通常希望修改 onSocket: didReadData: withTag:

    - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
    {
        NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length])];
        NSString *str = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
        if(str)
        {
          myLabel.text = str;   
        }
    }
    

    现在,此代码不会在传入数据中检测到\n。例如,您可以 定义一个 ivar 或属性 rx_buffer

    NSMutableString *rx_buffer;
    

    这将是构建

    rx_buffer = [rx_buffer stringByAppendingString: str];
    

    直到您在str 中检测到\n

    【讨论】:

    • 是的,即使是简单的 TCP 监听器也包含很多工作。
    • 是的。最后,我能够将 EchoServer 应用程序转换为 Iphone 应用程序。现在可以了...谢谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2019-02-20
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多