::send(s,"USER myway\r\n",sizeof("USER myway\r\n"),0);
::recv(s,sztext1,sizeof(sztext1),0);
printf(sztext1);
::send(s,"PASS 123\r\n",sizeof("PASS 123\r\n"),0);
::recv(s,sztext2,sizeof(sztext2),0);
printf("%S\n",sztext2);
getchar();
::send(s,"PWD \r\n",sizeof("PWD \r\n"),0);
::recv(s,sztext3,sizeof(sztext3),0);
printf("%S\n",sztext3);
getchar();
char szTemp1[64];
memset(szTemp1,0,64);
::send(s,"PASV \r\n",sizeof("PASV \r\n"),0);
int error1=::recv(s,szTemp1,64,0);
printf("%s\r\n",szTemp1);
port =chartoint(szTemp1); //自己编的函数,用于向服务器务器返回的应答获取端口号
::send(s,"LIST \r\n",sizeof("LIST \r\n"),0);
int error=::recv(s,szTemp,64,0);
printf(szTemp);
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); //此线程用于建立数据连接,接收像LIST命令返回的数据 CloseHandle(hThread1);
if(hThread1==NULL)
{
cout<<"创建线程失败!"<<endl;
}
if(getchar())
{
return 0; //正常结束程序
}
else
{
Sleep(100);
}
::closesocket(s); //关闭套接字句柄
::WSACleanup();
Sleep(100);
5 个解决方案
#1
我来帮顶 虽然不会
#2
ftp协议中有2条连接,一条是控制连接,一条是数据连接,建议好好研究下ftp协议。
当发送PASV之后,返回“227 Entering Passive Mode (192,168,1,2,4,18)”。这意味着在服务器上有一个端口被开放,他将为我们后面接着的数据传输作好准备,但是我们如何知道该端口号呢,就在(192,168,1,2,4,18)中,前面四位指服务器的地址,关键是最后两位,将最后第二位乘256再加上最后一位的值就是我们的端口号,也就是4*256+18。取得端口号之后我们就可以用socket连接到这里。这为我们后面的工作作好准备了,因为我们的取得列表,上传,下载文件都要依靠它来实现。
当发送PASV之后,返回“227 Entering Passive Mode (192,168,1,2,4,18)”。这意味着在服务器上有一个端口被开放,他将为我们后面接着的数据传输作好准备,但是我们如何知道该端口号呢,就在(192,168,1,2,4,18)中,前面四位指服务器的地址,关键是最后两位,将最后第二位乘256再加上最后一位的值就是我们的端口号,也就是4*256+18。取得端口号之后我们就可以用socket连接到这里。这为我们后面的工作作好准备了,因为我们的取得列表,上传,下载文件都要依靠它来实现。
#3
这个我知道,协议我已经看过,这个问题我已经解决,但是我在试图用CWD 进入子目录,后再输入个PASV命令打开另外个服务器数据端口,我用第二个线程用recn接收数据时接收不着啊,后我用Wireshark拦截包,发现个奇怪的现象,就是数据端口(第二个PASV命令后)打开了,但既不知传到哪里去了,又好像没有什么我期望数据。专家请解答!
#4
服务器的端口打开了,你和服务器这个临时端口之间建立了连接了吗?
#5
问题已找到,谢谢!
#1
我来帮顶 虽然不会
#2
ftp协议中有2条连接,一条是控制连接,一条是数据连接,建议好好研究下ftp协议。
当发送PASV之后,返回“227 Entering Passive Mode (192,168,1,2,4,18)”。这意味着在服务器上有一个端口被开放,他将为我们后面接着的数据传输作好准备,但是我们如何知道该端口号呢,就在(192,168,1,2,4,18)中,前面四位指服务器的地址,关键是最后两位,将最后第二位乘256再加上最后一位的值就是我们的端口号,也就是4*256+18。取得端口号之后我们就可以用socket连接到这里。这为我们后面的工作作好准备了,因为我们的取得列表,上传,下载文件都要依靠它来实现。
当发送PASV之后,返回“227 Entering Passive Mode (192,168,1,2,4,18)”。这意味着在服务器上有一个端口被开放,他将为我们后面接着的数据传输作好准备,但是我们如何知道该端口号呢,就在(192,168,1,2,4,18)中,前面四位指服务器的地址,关键是最后两位,将最后第二位乘256再加上最后一位的值就是我们的端口号,也就是4*256+18。取得端口号之后我们就可以用socket连接到这里。这为我们后面的工作作好准备了,因为我们的取得列表,上传,下载文件都要依靠它来实现。
#3
这个我知道,协议我已经看过,这个问题我已经解决,但是我在试图用CWD 进入子目录,后再输入个PASV命令打开另外个服务器数据端口,我用第二个线程用recn接收数据时接收不着啊,后我用Wireshark拦截包,发现个奇怪的现象,就是数据端口(第二个PASV命令后)打开了,但既不知传到哪里去了,又好像没有什么我期望数据。专家请解答!
#4
服务器的端口打开了,你和服务器这个临时端口之间建立了连接了吗?
#5
问题已找到,谢谢!