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
这导致服务器正确地拒绝我的连接。
所以,最后,程序员的错误。 :)
您收到的错误消息是什么? – 2011-02-13 06:47:02
oops(data):client3:拒绝连接 – 2011-02-13 06:50:32