Iphone听tcp端口

Sai*_*ait 5 port tcp ios

我从其他类似问题的答案中读到了一些建议的链接.第1条,图书馆1,另一个SO问题.但是,我无法弄清楚如何进行以下应用程序.

基本上,我发送到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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rok*_*arc 6

听一些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;   
    }
}
Run Code Online (Sandbox Code Playgroud)

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

NSMutableString *rx_buffer;
Run Code Online (Sandbox Code Playgroud)

这将是建立

rx_buffer = [rx_buffer stringByAppendingString: str];
Run Code Online (Sandbox Code Playgroud)

直到你发现\nstr.

  • 是.最后,我能够将EchoServer应用程序转换为Iphone应用程序.它现在有效......谢谢你的建议. (2认同)