在一个ftp服务器中,ClientSock接受客户端,然后在处理客户端PORT命令时,ToSock,toSock_sin的初始化都没问题,但为何接下来的connect语句会出现10060的错误?而且真个程序到这里就卡了,不得不退出。
请高手们不吝赐教!!!
谢谢!!!!!!
主要代码如下:
ClientSock = accept (WinSocket, (struct sockaddr *) &accept_sin, (int *) &accept_sin_len);closesocket (WinSocket);while(1)
{
memset(szServerA,0, sizeof (szServerA));
iReturn = recv (ClientSock, szServerA, sizeof (szServerA), 0);
if( /*其他命令*/){}
else if ((strncmp(szServerA, "PORT", 4) == 0))
{
/*获取客户端ip为data_ip*/
/*获取客户端端口为data_port*/
SOCKET ToSocket= socket (AF_INET, SOCK_STREAM, 0);
sockaddr_in toSock_sin;

toSock_sin.sin_family = AF_INET;
toSock_sin.sin_port = htons (data_port);  
toSock_sin.sin_addr.s_addr = htonl (data_ip);
if(connect (ToSocket, (struct sockaddr *)&toSock_sin, sizeof(toSock_sin)) == SOCKET_ERROR )
{
wsprintf(str,"425 Cannot open data connection (%s %d)!\nSocket error %d\r\n", data_ip, data_port, WSAGetLastError() );
}
else
wsprintf(str,"200 Port command okay!\r\n "); send(ClientSock, str, strlen(str), 0);
}
}

解决方案 »

  1.   

    连接超时检查一下端口什么的用ftp直接登录可不可以
      

  2.   

    10060错误
    由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 检查一下data_ip设备有没有启动。即IP为data_ip端的服务器进程有没有启动。
      

  3.   

    从windows自带ftp客户端登陆成功的,其他的的ftp命令也都成功,唯独dir,ls,get等几个服务要先通过PORT命令建立新的数据连接,就会卡到这里了还有2楼的:
    我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧
      

  4.   

    连接超时,用CMD ->FTP IP地址 测一下,然后用netstat -an 查一下连接的TCP协议的端口!
    如果对方是UNIX系统,用netstat -rn
      

  5.   


    我的服务器是在本地机上的,用ftp ip 能成功登陆
    cmd ->netstat -an 里面显示我的客户端端口开着的
      

  6.   

    在你对应的机器上的程序,在对于的端口上,必须有accept类似的代码来接受connect请求才行。
      

  7.   


    你是说在客户端操作吗?可是这个客户端是windows系统自带的,怎么搞啊?
      

  8.   

    晕死,你的socket端口又不是windows保留的端口,即使是,客户端机器也需要有相应的程序启动才行。
    像你这种情况,你的客户端没有accpet程序,你调用connect又如何能连接呢?你连接一个不存在的东西会成功吗?
      

  9.   


    先谢谢你的耐心回帖!
    你的意思是客户端那边的问题吗?服务器这里没办法处理?
    还有啊,这段代码里客户端已经告诉了自己的开放端口data_port和地址data_ip,这样服务器端去连接它也不行?
      

  10.   

    谢谢!
    我是用ftp 192.168.1.115 登陆的,这样应该没你说的那个问题吧?
      

  11.   


    用的是windows自带的啊,CMD -> ftp 192.168.1.115登陆的,这客户端没法改了 
      

  12.   

    再问一下,在PORT模式下,要建立新的数据通道,是否需要新建一个SOCKET来连接???
      

  13.   

    测试网络,通过isa2004上网,客户端经常出现10060连接问题,从微软网站找了个解决办法1. Start Registry Editor (Regedt32.exe) and go to the following subkey: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters2. On the Edit menu, click Add Value, and then add the following information: Value Name: TcpMaxDataRetransmissions
    Value Type: REG_DWORD – Number
    Valid Range: 0 – 0xFFFFFFFF
    Default Value: 5 Decimal
    New Value: 10 Decimal3. Click OK and then quit Registry Editor.4. Reboot after registry change has been made.提供参考楼主是要开发类似于Outlook EXpress之类的邮件客户端程序吗?
    这个应该是有封装好的函数的
    邮件服务器socket连接玩了,是要由命令才会响应的,最好用封装的邮件服务器操作函数