写了ftpftp链接服务器被拒绝和客户端,但是连接被拒绝,报很异常,求指教

求高手指教(FTP服务器&c语言) — 编程爱好者社区
主题:求高手指教(FTP服务器&c语言)
[专家分:0]
#include&&windows.h&#include&&winuser.h&#include&&string.h&#include&&stdlib.h&#include&&math.h&#include&&stdio.h&#include&&tchar.h&&#include&&winnls.h&char&sbuffer[80],rbuffer[80];//send&and&receive&buffersint&n,//countersSOCKET&s,sock1,sock2;sockaddr_in&ServerAddr1,ServerAddr2;sockaddr_in&from,int&DWORD&StartSock(){&&&&WSADATA&WSAD&&&&if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)&&&&{&&&&&&&&printf(&sock&init&fail!&)&;&&&&&&&&return(-1);&&&&}&&&&return(1);}DWORD&CreateSocket1()&&&//监听端口{&&&&//memset(&ServerAddr1,0,sizeof(ServerAddr1));&&&&//sock1=socket(AF_INET,SOCK_STREAM,0);&&&&sock1=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);&&&&if(sock1==SOCKET_ERROR)&&&&{&&&&&&&&printf(&sock&create&fail&);&&&&&&&&&&&&WSACleanup();&&&&&&&&&&&&return(-1);&&&&}&&&&ServerAddr1.sin_family=AF_INET;&&&&ServerAddr1.sin_addr.s_addr=inet_addr(&192.168.0.4&);&&&//这是我电脑IP&&&&ServerAddr1.sin_port=htons(2058);&//RECV_PORT1=2058&&&&if(bind(sock1,(struct&sockaddr&FAR&*)&ServerAddr1,sizeof(ServerAddr1))==SOCKET_ERROR)&&&&{&&&&&&&&printf(&bind&is&the&error1\n&);&&&&&&&&return(-1);&&&&}&&&&return(1);}DWORD&CreateSocket2()&&//数据端口{&&&&&&&&//memset(&ServerAddr2,0,sizeof(ServerAddr2));&&&&//sock2=socket(PF_INET,SOCK_STREAM,0);&&&&sock2=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);&&&&if(sock2==SOCKET_ERROR)&&&&{&&&&&&&&printf(&sock&create&fail&);&&&&&&&&&&&&WSACleanup();&&&&&&&&&&&&return(-1);&&&&}&&&&ServerAddr2.sin_family=AF_INET;&&&&ServerAddr2.sin_addr.s_addr=inet_addr(&192.168.0.7&);&&//这是服务器地址,我用serv_u在旁边电脑上建的&&&&ServerAddr2.sin_port=htons(2058);&&&&return(1);}int&main(){&char&Buf1[80];&char&data[80]={&user&};&int&&length=sizeof(sockaddr_in);&StartSock();&CreateSocket1();&CreateSocket2();&if(listen(sock1,5)&0)&{printf(&Listen&error&);&&return&-1;&}&printf(&listen1...\n&);&&&//监听if(connect(sock2,(struct&sockaddr&*)&ServerAddr2,sizeof(ServerAddr2))==SOCKET_ERROR)&&&&{&&&&&&&&printf(&Connect&fail&\n&);&&&&&&&&closesocket(sock2);&&&&&&&&return(-1);&&&&}&&&&&&&&&&&&//将数据端口与服务器相连&printf(&connected&to&%s\n&,inet_ntoa(ServerAddr2.sin_addr));for(;;)&{&&&&&&&&&&&&&&&&if(s=accept(sock1,(struct&sockaddr&*)(&from),&length)==INVALID_SOCKET)&&&//由监听端口收取命令&&&&&&&&&&&&{&&&&&&&&&&&&&&&&printf(&accept&error&);&&&&&&&&&&&&&&&&return&-1;&&&&&&&&&&&&}&&&&&&&&for(;;)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&memset(Buf1,80,0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(recv(sock1,Buf1,80,0)&0){&printf(&recv&error&);}&&&&&&&&&&&&&&&&&&&&&&&printf(Buf1);&&&&&&&&&&&&&&&&&}}&return&0;}&&&&为什么我能连接上服务器,却收不到服务器发过来的命令,服务器确认是好的,我用DOS命令能进入求大侠指教,有FTP源码请发邮箱,非常感谢~~
本帖地址:&
回复列表 (共6个回复)
[专家分:6260]
只看到你的服务器接受,却看不到服务器发送。
[专家分:0]
是啊,我认为我要是建立的通路他就会发个数据包过来,要求我输入用户名,但我一直收不到,我用open&192.168.0.7&2058测试,却能收到
[专家分:0]
[quote]只看到你的服务器接受,却看不到服务器发送。[/quote]是啊,我认为我要是建立的通路他就会发个数据包过来,要求我输入用户名,但我一直收不到,我用open&192.168.0.7&2058测试,却能收到大侠请指教小的下下~~
[专家分:6260]
我晕哦,我还以为你写FTP服务器呢。楼主知道FTP协议吗?先用一个sock去连服务器,这个sock就是协议sock,所有的客户命令发送和服务器状态获取都通过这个sock。另外一个sock是数据sock,在接收和发送文件的时候,如果是PORT&x,x,x,x,x,x,那么数据sock就像你写的那样,作为一个服务器sock。如果是PASV,那么数据sock就主动去链接服务器的另外一个端口,该端口由PASV命令的返回状态决定。注意咯,所有的命令都从第一个sock发送,包括刚刚提到的PORT或者PASV。所有的服务器状态也都从第一个sock读取。第二个sock在发送完或者接受完之后就由发送端主动断开了。
[专家分:0]
[quote]我晕哦,我还以为你写FTP服务器呢。楼主知道FTP协议吗?先用一个sock去连服务器,这个sock就是协议sock,所有的客户命令发送和服务器状态获取都通过这个sock。另外一个sock是数据sock,在接收和发送文件的时候,如果是PORT&x,x,x,x,x,x,那么数据sock就像你写的那样,作为一个服务器sock。如果是PASV,那么数据sock就主动去链接服务器的另外一个端口,该端口由PASV命令的返回状态决定。注意咯,所有的命令都从第一个sock发送,包括刚刚提到的PORT或者PASV。所有的服务器状态也都从第一个sock读取。第二个sock在发送完或者接受完之后就由发送端主动断开了。[/quote]我是要写FTP客户端啊,我觉得我上面的程序写的跟你讲的差不多,我sock1用来接送命令(处于监听状态),sock2用来传送数据,但我连接到服务收不到他传回来的确认包,&是我程序写的问题???
[专家分:6260]
来看看流程吧,对比一下自己的代码connect(sock1,&server)recv(sock1)&&===&welcome&消息(楼主要的就是这个消息吧)bind(sock2,&port);send(sock1,&PORT&x,x,x,x,x,x&);&为接下来的LIST做准备recv(sock1)&&===服务器确认端口ok的消息send(sock1,&&LIST&)s&=&accept(sock2)recv(s)&&====&list结果send(sock1,&PORT&x,x,x,x,x,x&);&为接下来的SEND做准备recv(sock1)&&===服务器确认端口ok的消息send(sock1,&&SEND&file&)s&=&accept(sock2)send(s,&file);close(s)&发送完毕主动closerecv(sock1)&&===服务器存储ok的消息
您尚未登录,请登录后再回复。FTP连接时出现“227 Entering Passive Mode”的解决方法
字体:[ ] 类型:转载 时间:
FTP连接时出现“227 Entering Passive Mode”解决办法也很简单,只需要关闭客户端的PASV方式,强制其用PORT方式访问服务器即可
FTP服务的两种工作模式: •port方式(主动模式), 连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:“我打开了***X端口,你过来连接我”。于是服务器从20端口向客户端的***X端口发送连接请求,建立一条数据链路来传送数据。 •pasv方式 ( 被动模式 ), 连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:“我打开了***X端口,你过来连接我”。于是客户端向服务器的***X端口发送连接请求,建立一条数据链 路来传送数据。 由于服务器上的FTP进行TCP/IP筛选,仅允许特定的端口可以被客户端连接,所以无法使用PASV方式。找到了原因,解决办法也很简单,只需要关闭客户端的PASV方式,强制其用PORT方式访问服务器即可。 客户端登录FTP服务器后,用passive命令关闭客户端的PASV方式,如下: 代码如下
代码如下: ftp& passive Passive mode off.
再次执行该命令就可以启用PASV模式。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具君,已阅读到文档的结尾了呢~~
发全国大学的ftp服务器地址了!!!
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
发全国大学的ftp服务器地址了!!!
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口解决FTP服务器故障7妙招_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
解决FTP服务器故障7妙招
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 ftp 服务器拒绝请求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信