FTP关联我闲着没事翻译的,不对的请指证下面一部分描述如何关联FTP协议的端口问题:传输数据的过程包括建立数据连接,选择适当端口传递参数. 用户和服务器的数据传输有默认的端口. 客户端默认的数据传输端口和协议连接的端口是一致的。 服务器的数据传输端口和协议的默认端口是相近的.一个FTP应用端口可以指定一个非默认的端口来传输数据。在这种情况下,每次是用不同的连接来接受数据。所以关联就是必需的了。处理方法:由于问题在于主机可以指定端口来传输数据。客户端和服务端都是用默认的端口。数据是用一个32位的主机地址和一个16位的TCP端口地址串在一起的。这个地址是用小数点来分开的独立的四个8位字符。端口的命令可能如下所示。端口 h1, h2, h3, h4, p1, p2 p1 表示前八位的端口字符 p2 表示后八位的端口字符 p1 & p2 可以在Buf10中参数化。得到主机的地址和端口后,按高低位的字符解析主机端口,并把它们放到变量中去,在data.ws中的相应的位置参数化这个端口。用lr_save_string保存这个被参数化了的变量。例子: /********************************************************************* * Created by Mercury Interactive Windows Sockets Recorder * Created on: Sat Apr 15 21:55:23 *********************************************************************/ #include "lrs.h" Actions () { char *NewPort; char *UserBuf; char Buf[255]; char Tmp[255]; int iVal, iHighVal, iLowVal; lr_think_time(12); lrs_send("socket2", "buf8", LrsLastArg); lrs_receive("socket2", "buf9", LrsLastArg); lrs_create_socket("socket3", "TCP", "LocalHost=0", "Backlog=1", LrsLastArg); /* 在socket3中得到本地主机的端口 */ NewPort = lrs_get_socket_attrib("socket3", LOCAL_PORT ); lr_output_message("Local port %s", NewPort); /* Parse NewPort to low and high order and save to 'PortNum' parameter */ iVal = atoi (NewPort); iLowVal = (WORD)(iVal) & 0xFF; iHighVal = (WORD)(((DWORD)(iVal) >> 8) & 0xFF); strcpy (Buf, itoa( iHighVal, Tmp, 10 )); strcat (Buf, ","); strcat (Buf, _itoa( iLowVal, Tmp, 10 )); /* Save the PortNum to buf 10. * send buf10 * "PORT 199,203,74,132,<PortNum>/r/n" * The first 4 numbers are the IP and the fifth argument must be * replaced with the new parameter.*/ lr_save_string(Buf, "PortNum"); /* Get the content of Buf10 and print to output for debug */ lrs_get_static_buffer("socket2", "buf10", 0, -1, NULL); UserBuf = lrs_get_user_buffer("socket2"); lr_output_message("Buf10 Content %s", UserBuf); lrs_send("socket2", "buf10", LrsLastArg); lrs_receive("socket2", "buf11", LrsLastArg); lrs_send("socket2", "buf12", LrsLastArg); lrs_receive("socket2", "buf13", LrsLastArg); lrs_set_accept_timeout(30,0); lrs_accept_connection("socket3", "socket4"); lrs_close_socket("socket3"); lrs_receive("socket4", "buf14", LrsLastArg); lrs_close_socket("socket4"); lrs_receive("socket2", "buf15", LrsLastArg); return 0; } ----------------------------------------------------------------
更多精彩内容,请访问http://www.17testing.com
