读书人

为什么会提示Connection refused啊该怎

发布时间: 2012-05-23 13:44:13 作者: rapoo

为什么会提示Connection refused啊?
刚刚开始看《UNIX网络编程》,就尝试了一下第一章的获取时间的程序,使用环回地址运行或者查看ifconfig里面的IPv4地址都得到的结果是connect error: Connection refused,请问是什么原因?
如果尝试ping 127.0.0.1的话则没有任何问题。
代码如下;
服务器端

C/C++ code
#include "unp.h"#include <time.h>int main(int argc , char ** argv){    int    listenfd , connfd;    struct sockaddr_in    servaddr;    char    buff[MAXLINE];    time_t    ticks;        listenfd = socket(AF_INET , SOCK_STREAM , 0);        bzero(&servaddr,sizeof(servaddr));    servaddr.sin_family = AF_INET;    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);    servaddr.sin_port = htons(13);        bind(listenfd , (SA *)&servaddr , sizeof(servaddr));    listen(listenfd , LISTENQ);        while(1)    {        connfd = accept(listenfd , (SA *)NULL , NULL);        ticks = time(NULL);        snprintf(buff , sizeof(buff) , "%.24s\r\n",ctime(&ticks));        write(connfd , buff , strlen(buff));        close(connfd);    }    return 0;}

客户端:
C/C++ code
#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: a.out <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");        }    }    if(n < 0)    {        err_sys("fputs error");    }    return 0;}


[解决办法]

服务端int on = 1; setsockopt(SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));

其实你的服务端第二次就再也启动不起来了,端口还在TIMEWAIT呢。
[解决办法]
探讨

发现问题的原因了,端口号13是保留端口所以bind调用失败,换了一个端口为5050就可以了。。

读书人网 >C++

热点推荐