我尝试打开一个 TCP 流以与具有可可应用程序的设备对话。我在网上搜索,发现有一些可能性可以做到这一点,但我有点卡住了。
我决定使用 NSStream 方式(因为它在 cocoa-touch 中被引用,如果我想我想将我的应用程序移植到 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 个对象(输入流和输出流)
我想达到的第一步是将 inputStream 放在 NSTextView 中并知道是否已到达主机......但我仍然卡住:(
如果有人能照亮我的路,那就太好了!我是 Stack Overflow 的新手,我很乐意帮助社区解决我非常了解的事情!:)
我更新了我的代码,似乎光来了,慢慢地,但它来了:) 我向 telnet 服务器发送了一个流。我在 texview 中得到了“你好”。现在,我想发送用户和密码以便能够向服务器发送命令,但这是我的“发送用户并通过”按钮代码:
- (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]];
}
按照我的搜索,服务器应该回复我类似“用户 + ok”但什么都没有...... 2 奇怪的事情: - 如果我打开 SSH 服务器的 FTP 服务器的套接字,我总是没有“你好”的响应问题。但是在 telnet 中,90% 的连接都会像这样给我一个奇怪的问候:“ÿýÿýÿûÿû”,为什么?
- 当我发送用户时,什么都没有发生,只有来自 handleEvent 的无法识别的事件......