在 inet_pton 中使用什么地址?
what address to use in inet_pton?
我是 IP/TCP 的初学者,但正在阅读 Addison Wesley:UNIX
网络编程
第一卷,我有以下代码:
#include "unp.h"
int main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if (argc != 2)
{
err_quit("usage: main <IPaddress>");
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
err_sys("socket error");
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
{
err_quit("inet_pton error for %s", argv[1]);
}
if (connect(sockfd, (SA *)&servaddr, sizeof(servaddr)) < 0)
{
err_sys("connect error");
}
while ((n = read(sockfd, recvline, MAXLINE)) > 0)
{
recvline[n] = 0;
if (fputs(recvline, stdout) == EOF)
{
err_sys("fputs error");
}
}
exit(0);
}
现在从书中,他们运行它是
solaris % a.out 206.168.112.96
如果我查找我的地址:
user@Host:~/Desktop/bin/1$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 15419 bytes 1627065 (1.6 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15419 bytes 1627065 (1.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.5 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 2a00:1028:8d1b:f32a:8ddb:cc89:8404:e9dc prefixlen 64 scopeid 0x0<global>
inet6 2a00:1028:8d1b:f32a:c84a:2566:28f5:81e1 prefixlen 64 scopeid 0x0<global>
inet6 fe80::2954:989:452f:c90f prefixlen 64 scopeid 0x20<link>
ether 5c:3a:45:55:ae:b5 txqueuelen 1000 (Ethernet)
RX packets 1095391 bytes 1521941184 (1.5 GB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 392567 bytes 53028207 (53.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我假设这是我的 IPv4 地址 10.0.0.5
,所以如果我尝试 运行 上面的代码:
./a.out 10.0.0.5
connect error: Connection refused
我的连接被拒绝了。我使用的地址正确吗?,从书中,他们使用了以 206 开头的内容...我应该使用什么地址将被 inet_pton
解析?
首先给自己一些可以在当地联系的东西。尝试 nc -v -l 13
到 运行 netcat 侦听端口 13,例如,在 运行 在单独的终端中运行您的程序之前。抱歉,我没有足够的代表来发表评论。
使用您的本地计算机 IP 地址。
或使用默认的本地主机 IP 地址:127.0. 0.1。
这个地址 127.0. 0.1 是 IPv4 的标准地址。
我是 IP/TCP 的初学者,但正在阅读 Addison Wesley:UNIX 网络编程 第一卷,我有以下代码:
#include "unp.h"
int main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if (argc != 2)
{
err_quit("usage: main <IPaddress>");
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
err_sys("socket error");
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
{
err_quit("inet_pton error for %s", argv[1]);
}
if (connect(sockfd, (SA *)&servaddr, sizeof(servaddr)) < 0)
{
err_sys("connect error");
}
while ((n = read(sockfd, recvline, MAXLINE)) > 0)
{
recvline[n] = 0;
if (fputs(recvline, stdout) == EOF)
{
err_sys("fputs error");
}
}
exit(0);
}
现在从书中,他们运行它是
solaris % a.out 206.168.112.96
如果我查找我的地址:
user@Host:~/Desktop/bin/1$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 15419 bytes 1627065 (1.6 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15419 bytes 1627065 (1.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.5 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 2a00:1028:8d1b:f32a:8ddb:cc89:8404:e9dc prefixlen 64 scopeid 0x0<global>
inet6 2a00:1028:8d1b:f32a:c84a:2566:28f5:81e1 prefixlen 64 scopeid 0x0<global>
inet6 fe80::2954:989:452f:c90f prefixlen 64 scopeid 0x20<link>
ether 5c:3a:45:55:ae:b5 txqueuelen 1000 (Ethernet)
RX packets 1095391 bytes 1521941184 (1.5 GB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 392567 bytes 53028207 (53.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我假设这是我的 IPv4 地址 10.0.0.5
,所以如果我尝试 运行 上面的代码:
./a.out 10.0.0.5
connect error: Connection refused
我的连接被拒绝了。我使用的地址正确吗?,从书中,他们使用了以 206 开头的内容...我应该使用什么地址将被 inet_pton
解析?
首先给自己一些可以在当地联系的东西。尝试 nc -v -l 13
到 运行 netcat 侦听端口 13,例如,在 运行 在单独的终端中运行您的程序之前。抱歉,我没有足够的代表来发表评论。
使用您的本地计算机 IP 地址。 或使用默认的本地主机 IP 地址:127.0. 0.1。 这个地址 127.0. 0.1 是 IPv4 的标准地址。