【问题标题】:How to program a communication protocol with "iphone sockets"?如何使用“iphone sockets”编写通信协议?
【发布时间】:2011-08-26 12:48:42
【问题描述】:

我为 Android 编写了一个客户端-服务器应用程序,我也在为 Iphone 做同样的事情。 问题是,对于 Java 服务器和 Android 客户端的通信过程,我编写了类似这样的程序(伪...):

data = read();
if ( data.compareTo("Something1") == 0) then
     write("Something2");
     data = read();
     if ( data.compareTo("Something3") == 0) then
          //End communitacion
     endif
endif

现在我的问题是“iphone 插座”我不知道该怎么做。我正在使用 AsyncScoket 库,并且使用该库,读取不会阻塞(这对我来说很复杂)并且它使用了我真的不知道如何正确使用它的回调。

我猜当读取完成时,如果发送的数据等于“Something1”或“Something2”,我应该在适当的回调中测试......但是,第一个小问题是它没有任何顺序。

我应该说我没有时间修改协议。

如果有人可以指导我,我将不胜感激。或者任何使用 AsyncSocket 库完成网络通信的代码示例。

谢谢!

【问题讨论】:

    标签: iphone objective-c network-protocols cocoaasyncsocket


    【解决方案1】:

    我最近开始使用 asyncsocket 和 TCP java 服务器。也许这段代码可能会有所帮助?

    要写入套接字,您需要从 asyncsocket 对象调用以下方法

    -(void)writeData:withTimeout:tag:;
    

    这里的数据应该是一个 NSData 对象。您可以通过以下方式轻松地将字符串转换为 NSData

    [someStringObject dataUsingEncoding:NSUTF8Encoding];
    

    要从套接字读取,只需调用此方法

    -(void)readDataWithTimeOut:tag:;
    

    如果不需要超时,则通过 -1 表示超时。

    就是这样。使用 cocoaasyncsocket 进行读/写比在 Java 中处理需要 datainputstream 和 dataoutputstream 以及其他类似内容的套接字要容易得多。

    重要的委托方法是

    -(void)onSocket:didReadData:withTag: gets called whenever the socket reads some data.
    

    这个委托的例子是..

    -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    
          NSString *string = [[NSString alloc] initWithBytes:[data bytes] 
                                                      length:[data length]
                                                    encoding:NSUTF8StringEncoding];
         //Do what ever comparison you'd like here.
    
    }
    

    如果您有任何不明白的地方,请告诉我,我会尽力解答您的疑问。

    【讨论】:

    • 最后,我使用了它。很抱歉忘记回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多