2014-01-13 2 views
0

나는 객관적인 c와 java 사이에 서버 클라이언트 연결을 처음 사용했습니다. 클라이언트에서 NSString을 java 서버로 보내고 서버에서 인쇄하려고하면 여기에 내 코드가 있습니다.objective-c 클라이언트에서 Java 서버로 보내는 방법은 무엇입니까?

[inputStream setDelegate:self]; 
[outputStream setDelegate:self]; 
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[inputStream open]; 
[outputStream open]; 
[self initNetworkCommunication]; 

NSString *response = @"testt\n"; 

NSData *data = [[NSData alloc] initWithData:[response  

    dataUsingEncoding:NSASCIIStringEncoding]]; 

[outputStream write:[data bytes] maxLength:[data length]]; 


} 
- (void)initNetworkCommunication { 
CFReadStreamRef readStream; 
CFWriteStreamRef writeStream; 
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 6789, &readStream,       
&writeStream); 
inputStream = (__bridge NSInputStream *)readStream; 
outputStream = (__bridge NSOutputStream *)writeStream; 
} 

서버 코드 : - 그것은 localhost을해야

ServerSocket welcomeSocket=new Socket(6789); 
    while(true){ 
    Socket connectionSocket=welcomeSocket.accept(); 
    BufferedReader inFromClient=new BufferedReader(new  
    InputStreamReader(connectionSocket.getInputStream()); 
    System.out.println(inFromClient.readLine()); 

    } 
+0

서버 측에서 아무 일도 일어나지 않지만 클라이언트 측에서 실행을 중지하면 "null"이 서버 측에 인쇄됩니다. – user3188822

+0

몇 사람이 나를 안내 할 수 있습니까? – user3188822

답변

0

코드의 첫 번째 눈부신 문제는 로컬 호스트를 맞춤법이 틀린 것으로 나타납니다.

initNetworkCommunication 번으로 전화를 걸 수도 있습니다. 두 번째 호출은 IO 스트림이 닫히도록 재설정합니다. 이후에 호출을 열거 나 아무것도하지 않는 것처럼 보이기 때문에 이전 스트림을 할당 취소하거나 아무것도하지 않고 그냥 두십시오.

스트림을 다루는 코드가 나에게 잘 들리지만, 반환되는 스트림이 NULL인지 확인하고 CFReadStreamCopyError이 관련 정보를 반환하는지 확인하는 것이 좋습니다.

클라이언트가 연결할 때마다 서버에서 문자를 인쇄하는 일부 코드는 스트림 처리 또는 연결에 문제가 있는지 여부를 디버깅하는 데 도움이 될 수 있습니다.

+0

죄송합니다. 복사 실수였습니다.하지만 코드 localhost의 철자가 정확하며 메서드는 한 번만 호출됩니다. 또한 나는 클라이언트 사이의 연결이 끊어지면 서버가 예외를 던지기 때문에 연결이 있다고 생각한다. – user3188822

+0

에서 문제가 발견되었습니다. 내가 끝나면 outputStream을 닫아야한다. – user3188822

관련 문제