我是IP / TCP的初学者,但是阅读Addison Wesley:UNIX网络编程第1卷,我有以下代码:
#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
例如,在单独的终端上运行程序之前,请尝试在端口13上运行netcat侦听。抱歉,我没有足够的代表只能发表评论。
从netcat列出到localhsot(127.0.0.1)之后,建立了连接。但是日期时间甚至还没有打印出来。我得到了:
Connection received on localhost 51188
,但是然后等待。如何结束列表并从客户端(c可执行文件)获取输出?使用netcat只是为了创建一个临时示例服务器来测试套接字。您将需要通过inetd或xinetd启用日间服务器以接收日期和时间响应
@milanHrabos:挑衅是绝对正确的:
"Give yourself something to connect with"
。“ nc -v -l 13”是一个很好的建议。它会让测试客户端“连接” ...但不会给出“时间”。“ time.nist.gov”(132.163.96.4
)是另一种选择:tf.nist.gov/tf-cgi/servers.cgi。请确保“支持”和“接受” pivoc的回复。