我是网络编程新手,我正在尝试使用gethostbyname函数。当我输入一个字符串,如" www.yahoo.com"到gethostbyname函数它工作正常,但是当我输入一个char数组时,它总是返回null。
<base href="${ctx}/" >
知道如何解决这个问题吗?
答案 0 :(得分:0)
在linux程序员手册中,该函数具有以下声明:
struct hostent *gethostbyname(const char *name);
这意味着参数必须是char数组(或外行术语中的字符串)。调用函数时,可以直接使用引用的字符串,如“yahoo.com”。
以下代码是gethostbyname如何工作的工作示例:
#include <stdio.h>
#include <string.h>
#include <netdb.h>
int main(){
struct hostent* h=gethostbyname("yahoo.com");
printf("Hostname: %s\n", h->h_name);
printf("Address type #: %d\n", h->h_addrtype);
printf("Address length: %d\n", h->h_length);
char text[50]; // allocate 50 bytes (a.k.a. char array)
strcpy(text,"bing.ca"); //copy string "bing.ca" to first 7 bytes of the array
h=gethostbyname(text); //plug in the value into the function. text="bing.ca"
printf("Hostname: %s\n", h->h_name);
printf("Address type #: %d\n", h->h_addrtype);
printf("Address length: %d\n", h->h_length);
return 0;
}
我打了两次电话。一次用于yahoo.com,一次用于bing.ca,我检索了主机名,地址类型号和地址长度(即存储IP所需的字节数)。
为了调用bing地址,我分配了一个char数组,用字符串填充它,然后将char数组作为参数传递给函数。
答案 1 :(得分:0)
您的服务器无法自行解决。 “修复”这种方法最常见的方法是将自己的名称放入其主机文件中。虽然出于各种原因这是个好主意,但确实应该解决潜在的问题。
这使得它根本不是C问题,而是服务器配置问题。关闭它。
答案 2 :(得分:0)
它返回NULL的一个很好的理由是因为你传递的主机名不正确。 有时即使 hostname -v 也不会提供正确的主机名。
请尝试以下操作:
cat /etc/hosts
这将显示输出为:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain
那个&#39; localhost&#39;在上面的输出中127.0.0.1旁边是您的主机名。这将与 gethostbyname 完美配合。
答案 3 :(得分:0)
var hostBuilder = new HostBuilder()
.ConfigureWebHostDefaults(webHost =>
{
// Add TestServer
webHost.UseTestServer();
webHost.UseEnvironment(HostTestEnvironmentName.Get(inMemory: true))
.ConfigureEntityFrameworkForTesting(fixture)
.UseStartup<Startup>();
});
var host = hostBuilder.Start();
var client = host.GetTestClient();
_client = new FluentClient("http://a", client);
_server = host.GetTestServer();