2014-01-13 64 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; 
} 

服务器代码:

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

在代码中的第一个突出的问题似乎是你拼错本地主机 - 它应该是localhost

您也可以拨打initNetworkCommunication两次。第二个调用会重置你的IO流,因为你之后似乎没有打开它们,或者对它们做任何事情,并且保留之前的流或者被释放,或者只是坐在什么都不做。

处理流的代码对我来说看起来很好,但是您可能希望检查返回的流是否为NULL,以及检查CFReadStreamCopyError是否返回任何相关信息。

服务器上的某些代码用于在客户端连接时打印一个字符,这可以帮助您调试问题的出现在于处理流还是连接它们。

+0

对不起,我注意到,这是一个复制错误,但在我的代码localhost拼写正确,该方法只被调用一次。另外我认为他们之间有一个连接,因为当我放弃客户端时,服务器会抛出异常。 – user3188822

+0

发现问题。完成后,我应该关闭outputStream。 – user3188822

相关问题