无法连接到本地主机

问题描述:

我正在运行linux mint,并在命令终端中输入了一些命令来连接到本地主机,但它一直说连接失败。无法连接到本地主机

这是我键入:

echo "echo test" | ./<my executable> localhost <port #> 

这里是我的连接代码:

int r = connect(sock, addrList->ai_addr, addrList->ai_addrlen); 
    if (r < 0) { 
    printf("Connection failed\n"); 
    exit(1); 
    } 

这里是全码:

int main(int argc, char *argv[]) { 
    if (argc != 3) { 
    printf("Invalid arguments\n"); 
    exit(1); 
    } 

    char *serverIP = argv[1]; /*Server hostname*/ 
    char *portNumber = argv[2]; /*Port Number*/ 
    void *numericAddress; 
    char addrBuffer[INET6_ADDRSTRLEN]; 
    in_port_t port; 
    char buffer_stdin[65535]; 
    char buffer_stdout[65535]; 
    int bytes_read = 0; 
    int bytes_written = 0; 

    /*getting integral number of string representation of port number*/ 
    in_port_t servPort = atoi(argv[2]); 

    /*------------------get binary number of hostname-----------------*/ 
    struct addrinfo addrCriteria; 
    memset(&addrCriteria, 0, sizeof(addrCriteria)); 
    addrCriteria.ai_family = AF_INET; 
    addrCriteria.ai_socktype = SOCK_STREAM; 
    addrCriteria.ai_protocol = IPPROTO_TCP; 

    struct addrinfo *addrList; 

    int rtnVal = getaddrinfo(serverIP, portNumber, &addrCriteria, &addrList); 
    if (rtnVal != 0) { 
    printf("getaddrinfo() failed\n"); 
    exit(1); 
    } 

    numericAddress = &((struct sockaddr_in *) (addrList->ai_addr))->sin_addr; 
    /*Converting port to binary*/ 
    ((struct sockaddr_in *)(addrList->ai_addr))->sin_port = htons(servPort); 
    /*----------------------------------------------------------------*/ 

    inet_ntop(addrList->ai_addr->sa_family, numericAddress, addrBuffer, sizeof(addrBuffer)); 
    printf("IP ADDRESS: %s\n", addrBuffer); 

    /*Creating socket*/ 
    int sock = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); 
    if (sock < 0) { 
    printf("error creating socket\n"); 
    exit(1); 
    } 

    /*Establish connection to the echo server*/ 
    int r = connect(sock, addrList->ai_addr, addrList->ai_addrlen); 
    if (r < 0) { 
    perror("Connection failed\n"); 
    exit(1); 
    } 

    /*Reading from stdin and writing to socket until stdin ends 
    bytes_read = read(0, buffer_stdin, sizeof(buffer_stdin)); 
    write(sock, buffer_stdin, bytes_read);*/ 

    while ((bytes_read = read(0, buffer_stdin, sizeof(buffer_stdin)-1)) > 0) { 
    write(sock, buffer_stdin, bytes_read); 
    } 

    /*Shutting down write end of socket*/ 
    int r_shutdown = shutdown(sock, SHUT_WR); 
    if (r_shutdown < 0) { 
    printf("Shutting down write end of socket failed\n"); 
    exit(1); 
    } 

    /*Reading from socket and writing to stdout until socket ends*/ 
    while ((bytes_read = read(sock, buffer_stdout, sizeof(buffer_stdout)-1)) > 0) { 
    write(1, buffer_stdout, bytes_read); 
    } 

    close(sock); 
    exit(0); 
} 

我是否需要安装东西连接到本地主机?

感谢

编辑:确定这里是一个更新:

首先我键入指令终端的:chmod a + X exe文件(其中EXE是我们的UDP服务器) 然后我输入:./ exe例如./exe 2525 然后我输入:echo“echo test”| ./ localhost

但是,如果发生这种情况,终端不会返回“回声测试”,就像它正在等待用户输入,或者如果它陷入无限循环一样。

+1

您还没有表现出我们足够的代码。此外,使用'perror(“连接失败\ n”);'而不是'printf(“连接失败\ n”);'看看为什么连接失败 – 2014-09-12 18:22:54

+0

好吧,我会尝试 – umdcoder 2014-09-12 18:28:11

+0

它说:“连接拒绝”。我将发布我的代码的其余部分 – umdcoder 2014-09-12 18:29:05

它看起来像您需要提供在命令行上的本地主机:

./exe localhost 2525 

或:

echo test | ./exe localhost 2525 
+0

仍然无法正常工作。我认为,当你谈到大端存储与小端存储时,你是对的,因为在我们班,教授说如果你不使用正确的方法,这将是项目中的一个大问题。那么我应该试试哪一个? htonl()而不是htons()? – umdcoder 2014-09-12 18:53:11

+0

我相信你有什么好。是否执行命令'netstat -an -A inet | grep:2525'显示你的教授监听器正在运行?如果没有,那就是我的答案 – 2014-09-12 18:56:19

+0

当我输入时没有任何反应。我什么都没有回来。意思是? – umdcoder 2014-09-12 18:59:05