2011-02-13 77 views
1

我写了一个FTP客户端来自动进入被动模式,然后通过给定的IP和端口连接到服务器。为什么套接字会拒绝连接?

通常它的工作原理。有时它不会。

您是否认为这可能是因为服务器尚未有时间打开端口?为什么服务器会拒绝我的连接?

int sockfd; 
int len; 
struct sockaddr_in address; 
int result; 


/* Create a socket for the client. */ 
sockfd = socket(PF_INET, SOCK_STREAM, 0); 

/* Name the socket, as agreed with the server. */ 
address.sin_family = AF_INET; 
address.sin_addr.s_addr = inet_addr( hostname ); 
address.sin_port = htons( port ); 
len = sizeof(address); 

/* Now connect our socket to the server's socket. */ 
result = connect(sockfd, (struct sockaddr *)&address, len); 

if(result == -1) { 
    perror("oops (data): client3"); 
    printf("thread%i %s:%i\n", thread_name, hostname, prt); 
    exit(1); 
} 

只是看看从与socket编程经验的人的一些见解。

注意:这个客户端是多线程的。这个想法是从n台服务器中的1台下载1/n的文件。当我尝试连接到多个线程中的多个服务器时,这种情况经常会发生,但这不是排他性的 - 也就是说,它也可能发生在两个完全分离的服务器上。

编辑

事实证明,有在我的算法错误。在解析服务器响应(以这种形式返回一个IP和端口:127,0,0,1,0,20)之后,我忘了将我正在使用的某块内存清零,并最终写入通过一些以前的端口号。当重写次数较多时,没有问题。但是,当它变小时,剩下的剩余数量会造成问题。例如:

Last Port Calculation = 54321 
Current Port Calculation = 9876 
Current Port Stored as... 98761 <- appending the 1 to the port number 

这导致服务器正确地拒绝我的连接。

所以,最后,程序员的错误。 :)

+0

您收到的错误消息是什么? – 2011-02-13 06:47:02

+0

oops(data):client3:拒绝连接 – 2011-02-13 06:50:32

回答

2

也可能是因为服务器不能快速接受新的连接,并且他的接受缓冲区已满。

相关问题