2012-04-28 40 views
3

说话的设备我尝试打开一个TCP流说话与可可的应用程序的设备。 我搜索了网络,发现有一些可能性,但我有点卡住了。使用TCP/IP

我决定使用NSStream方式(因为它是在可可触摸引用,将是有益的,如果我想将我的应用程序到iPhone我相信),所以这里是我的代码:

@implementation AppDelegate 

- (IBAction)connect:(id)sender { 

    [NSStream getStreamsToHost:"192.168.1.4" port:23 inputStream:&inputStream outputStream:&outputStream]; 

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

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

    [inputStream open]; 
    [outputStream open]; 
} 

// Both streams call this when events happen 
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode 
{ 
    if (aStream == inputStream) { 
     [self handleInputStreamEvent:eventCode]; 
    } else if (aStream == outputStream) { 
     [self handleOutputStreamEvent:eventCode]; 
    } 
} 

- (void)handleInputStreamEvent:(NSStreamEvent)eventCode 
{ 
    switch (eventCode) { 
     case NSStreamEventHasBytesAvailable:[self readBytes]; 
      break; 
     case NSStreamEventOpenCompleted: 
      // Do Something 
      break; 
     default: 
     case NSStreamEventErrorOccurred: 
      NSLog(@"An error occurred on the input stream."); 
      break; 
    } 

} 

所以,当我点击我的连接按钮,它应该打开流到我的主机,并使我的2个对象(输入流和输出流)

我想要达到的第一步是在NSTextView中的inputStream和知道如果主机已达到或不...但我仍然停留:(

如果有人能照亮我的路,那会很棒!我是Stack Overflow的新手,我很乐意帮助社区了解我所知的很多东西! :)


我更新了我的代码,它似乎光来了,慢慢地,但它的到来:) 我做了一个流一个telnet服务器。我在texview中看到了“hello”。 现在,我想向用户发送&密码才能将命令发送到服务器,但这里是我的“发送用户&通”按钮的代码:

- (IBAction)sendusername:(id)sender { 

    NSString * usernameMsg = [NSString stringWithFormat:@"user @", [usernameField stringValue]]; 
    NSData * usertosend = [[NSData alloc] initWithData:[usernameMsg dataUsingEncoding:NSUTF8StringEncoding]]; 
    [outputStream write:[usertosend bytes] maxLength:[usertosend length]]; 

} 

按照我的searchs,服务器应该响应我喜欢“用户+ OK”,但没有一件事... 2似有东西: - 如果我打开套接字SSH服务器的FTP服务器,我总是没有问题的“你好”回应。但是在telnet中,有90%的连接回应我这样一个奇怪的问候:“ÿýÿýÿûÿû”,为什么?

  • 当我向用户发送,没有发生,只有unrocognized事件从为handleEvent ...
+0

当你这样做会发生什么?你有没有确认192.168.1.4(你为什么要硬编码?)正在监听端口23? – 2012-04-28 23:44:35

+0

192.168.1.4正在侦听端口23(telnet)。我可以通过终端与它联系。我对地址进行了硬编码,以确保错误不是来自条目。没有发生我这样做的时候,我以为我会在日志中看到的东西,但没有:/ – 2012-04-29 00:01:39

+0

仍然在黑,找不到NSStream良好的配置,并且可以不说话/有来自服务器的响应: – 2012-04-29 23:34:04

回答

0

我可以建议你看看https://github.com/robbiehanson/CocoaAsyncSocket/,一个漂亮的Objective-C包装的BSD套接字。它允许你以良好和干净的回调方式处理事件循环上的发送 - 接收交互(它甚至可以处理自定义的“消息终止”符号,让你更专注于实际的数据包处理,而不是合并和拆分你收到的东西从电线)。