[英]C: Store and read ipv4/ipv6 address and port
我正在嘗試的是:
我有一個結構:
typedef struct {
unsigned int id;
struct ??? addr;
} Peer;
我只想擁有一些方法,例如:
mypeer1.addr = storeAddr("192.168.1.1", 80);
mypeer2.addr = storeAddr("FE80:0000:0000:0000:0202:B3FF:FE1E:8329", 80);
接着
print("%s, %d", getAddrIp(mypeer1.addr.ip), getAddrIp(mypeer1.addr.ip));
我嘗試了sockaddr_storage和getaddrinfo等...,但是嘗試2天后失敗了,我需要幫助。
一個工作示例非常感謝! 謝謝!
編輯:澄清
1)我想要一個可以容納ipv4或ipv6地址和端口的數據結構(也許是sockaddr_storage?)
2)我想要一個方法來從字符串中存儲一個新地址(ipv4或ipv6和端口)
3)我想要一種從該結構中打印IP地址和端口的方法
EDIT2:我目前最大的嘗試
typedef struct {
unsigned int id;
addrinfo* addr;
} Peer;
examplePeer1 = (Peer) { 0, NULL };
getaddrinfo("192.168.1.1", "80", NULL, &examplePeer1.addr);
但現在我不知道如何打印IP和端口
我終於做到了!
typedef struct addrinfo Addrinfo;
typedef struct {
unsigned int id;
Addrinfo* addr;
} Peer;
void addr_log(Addrinfo* addr) {
if (addr->ai_family == AF_INET6) {
struct sockaddr_in6* saddr = (struct sockaddr_in6*)addr->ai_addr;
char ip_s[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &(saddr->sin6_addr), ip_s, INET6_ADDRSTRLEN);
printf("%s\n", ip_s);
printf("%hu\n", ntohs(saddr->sin6_port));
} else if (addr->ai_family == AF_INET) {
struct sockaddr_in* saddr = (struct sockaddr_in*)addr->ai_addr;
char ip_s[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(saddr->sin_addr), ip_s, INET_ADDRSTRLEN);
printf("%s\n", ip_s);
printf("%hu\n", ntohs(saddr->sin_port));
}
}
Peer examplePeer1;
Peer examplePeer2;
int main (int argc, char *argv[])
{
examplePeer1 = (Peer) { 0, NULL };
getaddrinfo("FE80:0000:0000:0000:0202:B3FF:FE1E:8329", "4444", NULL, &examplePeer1.addr);
examplePeer2 = (Peer) { 0, NULL };
getaddrinfo("192.168.1.1", "5555", NULL, &examplePeer2.addr);
addr_log(examplePeer1.addr);
addr_log(examplePeer2.addr);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.