connect:连接在客户端的c程序中被拒绝

时间:2013-01-08 12:11:09

标签: c sockets

我使用以下代码连接到某个端口的服务器,这些端口是作为命令行参数提供的......

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <stdlib.h>
#include <strings.h>

int main(int argc,char *argv[])
{
   struct sockaddr_in serverAddr;
   int clientSocketFd ;
   char buffer[1024];

 if((clientSocketFd = socket(AF_INET, SOCK_STREAM, 0))==-1)
    perror("socket");

//get the server IP address and PORT
bzero(&serverAddr, sizeof serverAddr);
printf("ip address :- %s\n",argv[1]);
inet_pton(AF_INET, argv[1], &(serverAddr.sin_addr));
serverAddr.sin_family=AF_INET;
serverAddr.sin_port = atoi(argv[2]);

printf("PORT :- %d\n",serverAddr.sin_port);
//connect to server
if(connect(clientSocketFd,(struct sockaddr *) &serverAddr, sizeof(serverAddr)) == -1)
    perror("connect");

printf("Connecting to the server %s on port %s \n",argv[1],argv[2]);

while (1)
{
    //receive incoming data
    if(recv(clientSocketFd, buffer,1023, 0)==-1)
    {
    printf("buffer : %s\n" ,buffer);
    printf("Received from Server : %s \n",buffer);
        break;
    }


}
close(clientSocketFd);

}

但在客户端,它显示“connect:Connection Refused”...

如果我使用telnet,那么它显示已连接,但无法通过client.c的上述代码进行连接 请帮忙

此外,我将允许的最大挂起连接数更改为100,然后问题也没解决...... :( ... help plz

1 个答案:

答案 0 :(得分:10)

您正在连接错误的端口。变化:

serverAddr.sin_port = atoi(argv[2]);

要:

serverAddr.sin_port = htons(atoi(argv[2]));

将这些结构视为用于与另一个行星进行通信,并以不同方式编写数字。你必须转换为你编写数字的方式和写数字的方式,否则你会得到废话。

htons函数将端口号从计算机存储方式转换为在网络上使用的方式。 ntohs函数将端口号从网络上使用的方式转换为计算机存储方式。套接字地址按网络字节顺序排列。