网络编程。为什么为什么netstat -a检测不到server程序调用的监听套接字?
问题描述:
套接字第5章服务器回复程序: 图5-2 tcpcliserv/tcpserv01.c
书上说:"首先,我们在主机上后台启动服务器 ./tcpserv01 &, 会看到一个 address为9877的套接字处于listen状态:"
但是我用 netstat -a并没有发现address 为9877的套接字
然后调用图 5-4 tcp回射客户程序 tcpcliserv/tcpcli01.c ,会发现, 客户程序在运行到
Connect()时出错了, 我猜肯定是服务器程序有问题, 但是问题在哪里?
1 #include "unp.h"
2
3 int
4 main(int argc, char **argv)
5 {
6 int listenfd, connfd;
7 pid_t childpid;
8 socklen_t clilen;
9 struct sockaddr_in cliaddr, servaddr;
10
11 listenfd = Socket(AF_INET, SOCK_STREAM, 0);
12
13 bzero(&servaddr, sizeof(servaddr));
14 servaddr.sin_family = AF_INET;
15 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
16 servaddr.sin_port = htons(SERV_PORT);
17
18 Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
19
20 Listen(listenfd, LISTENQ);
21
22 for ( ; ; ) {
23 clilen = sizeof(cliaddr);
24 connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
25
26 if ( (childpid = Fork()) == 0) { /* child process */
27 Close(listenfd); /* close listening socket */
28 str_echo(connfd); /* process the request */
29 exit(0);
30 }
31 Close(connfd); /* parent closes connected socket */
32 }
33 }

答
我知道了,终于一步步调试出来了,包裹函数Bind写错了
答
sudo执行netstat看看,然后就是服务器程序是否在侦听,会不会出错退出来了
答
程序应该没错。他说的9877指的是在Local addr一列,有0.0.0.0:9877这样的监听