在Objective C中,如何向带有服务器的Java程序发送消息?

在Objective C中,如何向带有服务器的Java程序发送消息?,java,ios,objective-c,sockets,Java,Ios,Objective C,Sockets,我试图在Objective C中创建一个服务器,以便在用Java编写的程序和用Objective C编写的应用程序之间建立连接。我决定对输入和输出流使用套接字方法。我不明白为什么Java程序和我的Objective C服务器之间的通信不起作用。他们似乎在传递信息,但我认为他们彼此不理解。 我使用了这个网站上的教程: 所以,请你看看我的代码,如果你看到什么错误,告诉我好吗?这真的很有帮助。非常感谢 - (id)initWithPortNumber:(int)pn delegate:(id)dl{

我试图在Objective C中创建一个服务器,以便在用Java编写的程序和用Objective C编写的应用程序之间建立连接。我决定对输入和输出流使用套接字方法。我不明白为什么Java程序和我的Objective C服务器之间的通信不起作用。他们似乎在传递信息,但我认为他们彼此不理解。 我使用了这个网站上的教程:

所以,请你看看我的代码,如果你看到什么错误,告诉我好吗?这真的很有帮助。非常感谢

- (id)initWithPortNumber:(int)pn delegate:(id)dl{


        NSLog(@"Start connection");

        socketPort = [[NSSocketPort alloc] initWithTCPPort:pn];
        int fd = [socketPort socket];
        fileHandle = [[NSFileHandle alloc] initWithFileDescriptor:fd closeOnDealloc:YES];

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(newConnection:)
                                                            name:NSFileHandleConnectionAcceptedNotification
                                                                object:fileHandle];

        [fileHandle acceptConnectionInBackgroundAndNotify];

        NSLog(@"Socket cree");


        return self;
}

- (void) newConnection:(NSString *)path{

NSLog(@"Connection accepted");

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 56103, &readStream, &writeStream);

inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;

[inputStream retain];
[outputStream retain];

[inputStream setDelegate:self];
[outputStream setDelegate:self];

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode ];

[inputStream open];
[outputStream open];    
}

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
NSMutableArray *_data;
NSLog(@"stream:handleEvent: is invoked...");

switch(eventCode) {


    case NSStreamEventEndEncountered:
        [stream close];
        [stream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        NSLog(@"Problem with Server");
        break;

    case NSStreamEventHasBytesAvailable: ;
        NSLog(@"Read Input NSStreamEventHasBytesAvailable");

        if(!_data) {
            _data = [[NSMutableData data] retain];
        }
        uint8_t buf[1024];
        unsigned int len = 0;
        len = [(NSInputStream *)stream read:buf maxLength:1024];
        if(len) {
            [_data appendBytes:(const void *)buf length:len];
            [bytesRead setIntValue:[bytesRead intValue]+len];
        } else {
            NSLog(@"no buffer!");
        }
        break;

    case NSStreamEventErrorOccurred:
        NSLog(@"NSStreamEventErrorOccurred.");
        NSError* error = [stream streamError];

        NSString* errorMessage = [NSString stringWithFormat:@"%@ (Code = %d)",
                                  [error localizedDescription],
                                  [error code]];
        NSLog(@"%@",errorMessage);
        break;

    case NSStreamEventHasSpaceAvailable:;

        NSLog(@"Write output NSStreamEventHasSpaceAvailable");
        NSString * string =@"OK\n";
        NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
        [outputStream write:[data bytes] maxLength:[data length]];

        break;

    case NSStreamEventNone:
        [stream close];
        [stream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        NSLog(@"server problem");
        break;

    case NSStreamEventOpenCompleted:
        NSLog(@"%@ Stream Open",stream);

        break;
    }
}
最后一件事:当我运行服务器和Java程序时,我可以在输出中读取它。它也许能帮助你

2014-08-22 09:57:59.375 CocoaSpeech[791:303] stream:handleEvent: is invoked...


2014-08-22 09:57:59.376 CocoaSpeech[791:303] <__NSCFInputStream: 0x60800009eb90> Stream Open

2014-08-22 09:57:59.376 CocoaSpeech[791:303] stream:handleEvent: is invoked...
2014-08-22 09:57:59.376 CocoaSpeech[791:303] <__NSCFOutputStream: 0x60800009edc0> Stream Open
2014-08-22 09:57:59.376 CocoaSpeech[791:303] stream:handleEvent: is invoked...
2014-08-22 09:57:59.376 CocoaSpeech[791:303] Write output NSStreamEventHasSpaceAvailable
2014-08-22 09:57:59.377 CocoaSpeech[791:303] stream:handleEvent: is invoked...
2014-08-22 09:57:59.377 CocoaSpeech[791:303] Write output NSStreamEventHasSpaceAvailable
2014-08-22 09:57:59.375协同语音[791:303]流:handleEvent:被调用。。。
2014-08-22 09:57:59.376 CocoaSpeech[791:303]溪流开放
2014-08-22 09:57:59.376 CocoaSpeech[791:303]流:handleEvent:被调用。。。
2014-08-22 09:57:59.376 CocoaSpeech[791:303]溪流开放
2014-08-22 09:57:59.376 CocoaSpeech[791:303]流:handleEvent:被调用。。。
2014-08-22 09:57:59.376 CocoaSpeech[791:303]写入输出NSstreamVenthassSpace可用
2014-08-22 09:57:59.377 CocoaSpeech[791:303]流:handleEvent:被调用。。。
2014-08-22 09:57:59.377 CocoaSpeech[791:303]写入输出NSstreamVenthassSpace可用

您能找到问题的解决方案吗?