#include #include #include #include #include //#include #define SIO_GET_INTERFACE_LIST _IOR('t', 127, u_long) // typedef struct _INTERFACE_INFO { u_long iiFlags; /* Interface flags */ struct sockaddr iiAddress; /* Interface address */ struct sockaddr iiBroadcastAddress; /* Broadcast address */ struct sockaddr iiNetmask; /* Network mask */ } INTERFACE_INFO, FAR * LPINTERFACE_INFO; void message(const String &message); void main(void) { WSASystem wsaSystem; String hostName("li.net"); HostEnt hostEntry; ServEnt serverEntry; InternetAddress internetAddress(hostName); INETSocketAddress inetSocketAddress; Socket ftpControl; message(String("trying ")+hostName+String("...")); if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return;}} else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return;} message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); inetSocketAddress.internetAddress((hostEntry.addresses())[0]); if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return;} if(!ftpControl.openSocket()){message("unable to create socket.");return;} inetSocketAddress.family(PF_INET); inetSocketAddress.port(serverEntry.port()); if(!ftpControl.connect(inetSocketAddress)){message("unable to connect to ftp daemon");return;} // if(!receive(mAckConnectionResponseStrings))return FALSE; ftpControl.getSocketName(inetSocketAddress); message(String("my IP address is..")+(String)inetSocketAddress.internetAddress()); INETSocketAddress inetAddress; int length(sizeof(sockaddr_in)); ::getpeername(ftpControl,(sockaddr*)((sockaddr_in*)&inetAddress),&length); message((String)inetAddress.internetAddress()); // return mFTPControl.isConnected(); // char bigBuff[256]; // ::memset(bigBuff,0,sizeof(bigBuff)); INTERFACE_INFO interfaceInfo; ::memset(&interfaceInfo,0,sizeof(interfaceInfo)); ioctlsocket(ftpControl,SIO_GET_INTERFACE_LIST,(ULONG*)&interfaceInfo); message("ioctl succeeded"); INTERFACE_INFO *pI=&interfaceInfo; return; } void message(const String &message) { ::OutputDebugString(message+String("\n")); } #if 0 WORD FTPClient::open(String hostName) { HostEnt hostEntry; ServEnt serverEntry; message(String("trying ")+hostName+String("...")); if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} InternetAddress internetAddress(hostName); if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); INETSocketAddress::internetAddress((hostEntry.addresses())[0]); if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return FALSE;} if(!mFTPControl.openSocket()){message("unable to create socket.");return FALSE;} INETSocketAddress::family(PF_INET); INETSocketAddress::port(serverEntry.port()); if(!mFTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to ftp daemon");return FALSE;} if(!receive(mAckConnectionResponseStrings))return FALSE; mFTPControl.getSocketName((INETSocketAddress&)*this); return mFTPControl.isConnected(); } #endif