在一个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);
}
}
请高手们不吝赐教!!!
谢谢!!!!!!
主要代码如下:
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);
}
}
由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 检查一下data_ip设备有没有启动。即IP为data_ip端的服务器进程有没有启动。
我是在一台电脑和虚拟机上运行服务器端和客户端的,应该都是有启动的吧
如果对方是UNIX系统,用netstat -rn
我的服务器是在本地机上的,用ftp ip 能成功登陆
cmd ->netstat -an 里面显示我的客户端端口开着的
你是说在客户端操作吗?可是这个客户端是windows系统自带的,怎么搞啊?
像你这种情况,你的客户端没有accpet程序,你调用connect又如何能连接呢?你连接一个不存在的东西会成功吗?
先谢谢你的耐心回帖!
你的意思是客户端那边的问题吗?服务器这里没办法处理?
还有啊,这段代码里客户端已经告诉了自己的开放端口data_port和地址data_ip,这样服务器端去连接它也不行?
我是用ftp 192.168.1.115 登陆的,这样应该没你说的那个问题吧?
用的是windows自带的啊,CMD -> ftp 192.168.1.115登陆的,这客户端没法改了
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连接玩了,是要由命令才会响应的,最好用封装的邮件服务器操作函数