Java - Цель C Сокет UTF8 Проблема - PullRequest
1 голос
/ 15 марта 2011

Я программирую небольшую клиент-серверную программу. Сервер находится на Java и клиент IOS. На сервере я использую java.net.ServerSocket, а на клиенте LXSocket. Отправка данных (целое число, двойное число, число с плавающей запятой, строка UTF8) с клиента на сервер работает отлично, но когда я пытаюсь отправить строку UTF8 обратно клиенту, это как-то не получается. Я могу получить сообщение, но не преобразовать его в строку NSString.

Код отправки Java:

public void sendMessage(java.net.Socket socket) throws IOException {
    DataOutputStream stream = new DataOutputStream(socket.getOutputStream());
    int i = swabInt(64);
    stream.writeInt(i);
    String message = "Message to send as UTF8.";
    int len = swabInt(message.length());
    stream.writeInt(len);
    stream.write(nachricht.getBytes("UTF8"));
}

Код получения IOS:

-(IBAction)createSocket {
LXSocket *socket = [[[LXSocket alloc] init] autorelease];
[socket connect:@"localhost" port:11111];

int i = [socket readInt];
int len = [socket readInt];
NSData *data = [socket readBytesWithLength:len];
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

Получение потока работает, но когда я пытаюсь инициализировать строку NSString, происходит сбой. Есть идеи?

EDIT

Коробка передач работает нормально, но я обнаружил что-то странное. Я опробовал этот код:

NSString *test = @"The Message";
    const char *c = [test UTF8String];`
NSString *string = [[NSString alloc] initWithUTF8String:c];
NSLog(@"Decoding: %s", string);

Но моя Консоль говорит:

2011-03-17 22:51:27.555 Sockets[8641:207] Decoding: ¿Ø‚

Так есть ли способ получить строку NSString из этого массива символов, закодированного с помощью UTF8 ??

1 Ответ

2 голосов
/ 18 марта 2011

Хорошо, я понял это ... Обычная глупость ...

NSLog(@"%s", theString);

вместо

NSLog(@"%@", theString);

Epic fail.

...