从套接字切换到cocoaasyncsockets(与字符串转换相关的问题)

时间:2011-07-08 10:03:33

标签: iphone objective-c sockets objective-c++ cocoaasyncsocket

这个问题与用ObjectiveC编写的iOS项目有关,该项目使用了一些C ++ - Headers。

我正在使用此方法使用TCP将消息发送到服务器。如您所见,有一个名为c ++的方法,它修改字符串以符合特定协议。此字符串将写入流。

-(void) writeToServer:(NSString*) str 
{   
    int len = [str length];
    const char* in_ = new char[len];
    char* out_ = new char[len];

    in_ = [str UTF8String];

    len = binary8BitStringTo7BitStringEncoding::encode(in_, len, out_);

    uint8_t* test = new uint8_t[len];

    for (int i=0; i<len; ++i) {
        test[i] = out_[i];
    }

    [outputStream write:test maxLength:len];
}

我打算使用cocoaasyncsocket-framework(http://code.google.com/p/cocoaasyncsocket/)而不是直接处理流。问题是:如何在使用此框架时实现相同的功能?

这是使用此框架写入服务器的内容:

NSString *warningMsg = @"Are you still there?\r\n";
NSData *warningData = [warningMsg dataUsingEncoding:NSUTF8StringEncoding];
[sock writeData:warningData withTimeout:-1 tag:WARNING_MSG];

这些是用于编码和解码的两种方法的定义

unsigned int decode(const char* string, unsigned int len, char* out);
unsigned int encode(const char* string, unsigned int len, char* out);

实际上我正在寻找一种方法将char *(编码方法的结果)发送到服务器,但我不确定整个“NSString * to char * to uint8_t * to NSString * conversion。” / p>

使用此框架处理此类转换以获得相同结果的最佳方法是什么?

提前感谢您的答案和花费的时间!

1 个答案:

答案 0 :(得分:0)

我明白了,等效的方法看起来像这样:

-(void) writeToServer:(NSString*) str{

    int len = [str length];
    const char* in_ = new char[len];
    char* out_ = new char[len];

    in_ = [str cStringUsingEncoding:NSASCIIStringEncoding];

    len = binary8BitStringTo7BitStringEncoding::encode(in_, len, out_);

    [socket writeData:[NSData dataWithBytes:out_ length:len] withTimeout:-1 tag:1];

}