void ClientCreate(struct addrinfo * addr,
const char* port) {
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr ; /* What do I put here? */
service.sin_port = (u_short)atoi(port);
我不必使用inet_addr()
我知道已经尝试了很多可能性无效。
同样在端口上,MSDN示例使用htons()
,但上述工作原理。
有更好的方法吗?
答案 0 :(得分:1)
service.sin_addr.s_addr = inet_addr(我在这里放什么?);
应该是服务器的IP地址,
//如果服务器是localhost
service.sin_addr.s_addr = inet_addr("127.0.0.1");
。
同样在端口上,MSDN示例使用了htons()
htons
将主机字节顺序转换为网络字节顺序。
答案 1 :(得分:1)
快速浏览getaddrinfo。这将填充多个addrinfo
结构,并将它们返回给您。
一个简单的例子(部分来自Beej):
int sockfd;
struct addrinfo hints, *servinfo, *p;
int rv;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // use AF_INET6 to force IPv6
hints.ai_socktype = SOCK_STREAM;
if ((rv = getaddrinfo("www.example.com", "http", &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
exit(1);
}
如果确实想手动执行此操作,请务必使用htons ..