在Objective C中,如何向带有服务器的Java程序发送消息?
我试图在Objective C中创建一个服务器,以便在用Java编写的程序和用Objective C编写的应用程序之间建立连接。我决定对输入和输出流使用套接字方法。我不明白为什么Java程序和我的Objective C服务器之间的通信不起作用。他们似乎在传递信息,但我认为他们彼此不理解。 我使用了这个网站上的教程: 所以,请你看看我的代码,如果你看到什么错误,告诉我好吗?这真的很有帮助。非常感谢在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{
- (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可用
您能找到问题的解决方案吗?