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 のコードはこれとよく似ていますが、機能しません。なんで?