Xamarin,Android的TcpClient有时不工作

gzjq41n4  于 2022-12-09  发布在  Android
关注(0)|答案(1)|浏览(216)

我正在尝试创建一个应用程序,我必须使用WHOIS来获取我需要的一些信息。
为了获取WHOIS信息,我使用了我在这里找到的这个函数,并做了一些调整:

string Whois(string domain, string whoisServer = "whois.iana.org")
{
    string toReturn = "";
    TcpClient tcpClinetWhois = new TcpClient(whoisServer, 43);
    MemoryStream memoryStreamWhois = new MemoryStream();
    Task copying = tcpClinetWhois.GetStream().CopyToAsync(memoryStreamWhois);
    StreamWriter streamWriter = new StreamWriter(tcpClinetWhois.GetStream());
    streamWriter.WriteLine(domain);
    streamWriter.Flush();
    copying.Wait(3000);
    toReturn = Encoding.ASCII.GetString(memoryStreamWhois.ToArray());
    if (toReturn.Contains("refer:"))
    {
        toReturn = Whois(domain, toReturn.Split('\n').Where(W => W.StartsWith("refer:")).Select(R => R.Replace("refer:", "").Trim()).First());
    }
    return toReturn;
}

当我运行它的时候,它对大多数TLD都有效,比如.com或.org,但对. co.uk或.network以及其他可能的TLD无效。我不知道为什么它不能工作,因为为TLD选择了正确的WHOIS服务器。我也没有收到任何错误。
我正在使用.Net7.0和我的Android 11手机进行测试。
我已经在同一个网络上用完全相同的域测试了这个完全相同的功能,但是在一个控制台应用程序中没有任何问题!除了我在Xamarin应用程序中尝试这个功能外,一切都工作正常。

ruarlubt

ruarlubt1#

如果这是Xamarin.Android中的一个bug,我可以使用一个带有Web API的公共WHOIS服务器,或者自己创建一个运行该函数的WHOIS服务器,然后让我的应用程序调用它。

相关问题