0

iPhoneのwhoisサーバーに対してwhoisクエリを実行しようとしています。私はCFSocketを使ってみましたが、それを落としてストリームでやろうとしました。コード:

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"whois.internic.net", 43, &readStream, &writeStream);
NSInputStream *is = (__bridge NSInputStream *)readStream;
NSOutputStream *os = (__bridge NSOutputStream *)writeStream;

[is scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[os scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[is open];
[os open];

NSString *msgtext = [[NSString alloc] initWithFormat:@"%@%d", @"domain www.google.com", '\n'];
NSData *data = [[NSData alloc] initWithData:[msgtext dataUsingEncoding:NSASCIIStringEncoding]];
[os write:[data bytes] maxLength:[data length]];

UInt8 buffer[1024];
int len;
NSLog(@"START LOOP");
BOOL b = [is hasBytesAvailable];
NSLog(@"%u", b);
while([is hasBytesAvailable]) //value = false
{
    NSLog(@"HaveBytes");
    len = [is read:buffer maxLength:sizeof(buffer)];
    if(len > 0)
    {
        NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
        NSLog(output);
    }
}

メッセージが送信されたようですが、サーバーからの返信がありません。いくつかのサーバーを試しましたが、結果は同じです。どうしてこれなの?メッセージを間違って送信しているのですか?間違って受け取っていますか? Javaで同じことを試してみたので、ストリームで動作するはずです。

誰か助けてください:(

編集:

たとえば、完全に機能する Java コードがいくつかあります。

import java.net.*;
import java.io.*;

public class WhoIs {
    public static void main(String[] args) throws Exception{
        Socket s = new Socket("whois.internic.net",43);

        OutputStream os = s.getOutputStream();
        String domain = "www.google.com"+"\n";
        byte[] stringToByte = domain.getBytes();
        os.write(stringToByte);

        InputStream is = s.getInputStream();
        InputStreamReader reader = new InputStreamReader(is);
        BufferedReader buf = new BufferedReader(reader);

        String temp;
        while((temp=buf.readLine())!=null){
            System.out.println(temp);
        }
    }
}

Objective-c のコードはこれとよく似ていますが、機能しません。なんで?

4

0 に答える 0