如何使用“iphone套接字”编程通信协议?

时间:2011-08-26 12:48:43

标签: iphone objective-c network-protocols cocoaasyncsocket

我为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库进行网络通信的任何代码示例。

谢谢!

1 个答案:

答案 0 :(得分: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.

}

如果您有任何不明白的事情,请告诉我,我会尽力回答您的疑虑。