0

我已经为 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 sockets”我不知道该怎么做。我正在使用 AsyncScoket 库,并且使用该库,读取不会阻塞(这对我来说很复杂),并且它使用了我真的不知道如何正确使用它的回调。

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

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

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

谢谢!

4

1 回答 1

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.

}

如果有什么你不明白的,请告诉我,我会尽力解答你的疑惑。

于 2011-11-06T15:19:20.547 回答