我为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库进行网络通信的任何代码示例。
谢谢!
答案 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.
}
如果您有任何不明白的事情,请告诉我,我会尽力回答您的疑虑。