Переход от сокетов к cocoaasyncsockets (вопрос, связанный с преобразованием строк) - PullRequest
0 голосов
/ 08 июля 2011

Этот вопрос относится к проекту iOS, написанному на ObjectiveC, в котором используются некоторые заголовки C ++.

Я использую этот метод для отправки сообщений на сервер с использованием 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);

На самом деле я ищу способ отправить символ * (результат метода кодирования) на сервер, но я не уверен насчет преобразования "NSString * в char * в uint8_t * в NSString *. 1015 *

Как лучше всего справиться с такого рода конверсиями, чтобы достичь того же результата с помощью этой платформы?

Заранее спасибо за ответы и потраченное время!

1 Ответ

0 голосов
/ 09 июля 2011

Я разобрался, эквивалентный метод выглядит так:

-(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];

}
...