ftp 20端口释疑

来源:WHED  http://larryzhu.bokee.com/1953503.html
 


一直都对ftpserver如何使用20端口没有概念。今天算是弄明白了。

20端口并不接受外来的连接请求,而是连接到客户端的源端口。

只是适用于port模式,passive模式不涉及20端口。

比如:
客户端发来请求
port 222,222,222,222, 5,199
那么就表示客户端打开了1399端口来等待服务器连接。

5->0x05
199->0x77
0x0577 = 1399


这时候服务器创建一个socket并且绑定到20端口,然后连接到222.222.222.222 : 1399
完成发送数据的工作。


示例代码:
SOCKET sd;
SOCKADDR_IN addr;
int ret = 0;

sd = socket(AF_INET, SOCK_STREAM, 0);

addr.sin_family = AF_INET;
addr.sin_port = htons(20); //20作为源端口。如果这里写0,那么系统将自动分配一个1024 - 5000 之间的端口(这个范围可以通过修改注册表来调整)
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
//绑定源地址
ret = bind(sd, (sockaddr *)&addr, sizeof(addr));

addr.sin_port = htons(1399);
addr.sin_addr.S_un.S_addr = inet_addr("222.222.222.222"); //当然在服务器中不需要产生字符串形式的ip地址
ret = connect(sd, (sockaddr *)&addr, sizeof(addr));

//send data.....

ret = closesocket(sd);

posted on 2007-05-31 09:48  dhb133  阅读(1195)  评论(0编辑  收藏  举报

导航