약간의 클라이언트 - 서버 프로그램을 프로그래밍하고 있습니다. 서버가 Java 및 클라이언트 IOS에 있습니다. 서버에서는 java.net.ServerSocket을 사용하고 클라이언트에서는 LXSocket을 사용합니다. 클라이언트에서 서버로 데이터 (Integer, Double, Float, UTF8 String)를 보내는 것은 완벽하지만, UTF8 String을 Client로 다시 보내려고 할 때 실패합니다. 메시지를받을 수는 있지만 NSString으로 변환 할 수는 없습니다.Java - Objective C 소켓 UTF8 문제
자바 보내는 코드 :
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을 초기화하기 위해서 노력하고있을 때. 아이디어가 있으십니까?
편집
전송은 잘 작동하지만 난 이상한 뭔가를 발견했다. 이 코드 밖으로 시도 :
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: ¿Ø‚
그래서 UTF8 인코딩이 문자 배열에서있는 NSString를 얻을 수있는 방법이 있습니까?
왜 그렇게 낮은 수준이 될까요? 특별히 필요한 경우가 아니라면 표준 웹 컨테이너에서 간단한 웹 프레임 워크를 사용하는 것이 좋습니다. 그런 다음 XML 응답 (예 : RESTEasy 또는 XStream)을 제공하고 iOS 측에서 NSXMLParser를 사용합니다. 디버깅 (웹 브라우저 사용), 구성 (스레드 관리 등을 통한 Tomcat) 및 프로토콜 변경이 더 쉬워집니다. 필자는 클라이언트/서버 프로그램을 신속하게 작성하기 위해이 접근법을 사용했습니다. – WhiteFang34
XML 응답이나 Webservices를 사용하려고 생각했지만 너무 느립니다. 나중에 메시지가 커지고 이미지와 같은 다른 데이터가 포함됩니다. –
나는 당신의 질문에 답하기 위해'LXSocket'에 익숙하지 않지만, 당신은'message.length()'로 길이를 보냈다는 것을 알았다. 그것은 바이트 수 대신 문자 수를 반환합니다. getBytes ("UTF8")'에서 바이트의 길이를 리턴하고자 할 것이다. 지금 당장은 문제를 해결할 수 없지만 127 세가 넘는 문자를 보내려면 한 번만 문제가됩니다. – WhiteFang34