wsock32を利用したFTPクライアントプログラム
VBAでwsock32を利用したFTPクライアントプログラムを作成中です。
ソケット作成後FTPサーバーにポート21で接続まではできました。
接続後にrecv関数をステップインで実行すると
「220 myserver FTP server (Version ***) ready.」
が返ってきます。
しかし、接続してrecv関数を実行する処理を実行すると
何もrecv関数で返り値を取得できません。
どうすればステップイン実行をしない場合でも正しく返り値を取得できますか?
その後「USER username」をsend関数で送ろうとしていますが、うまくいきません。send関数で送る文字列やタイミングを教えてください。
FTPサーバーに接続->認証->ファイル取得を行いたいのですがまず認証までを解決したいです。よろしくお願いします。
以下コード抜粋----------------------------------------------
'WinSock初期化
ret = WSAStartup(&H101, mwsad)
'ポート指定
port = 21
'ホスト名解決
phostent = gethostbyname("myserver")
'Socket準備
msocket = socket(AF_INET, SOCK_STREAM, 0)
'ポインタからHostEnt構造体設定
Call MoveMemory(lhostent, ByVal phostent, Len(lhostent))
Call MoveMemory(lAddrList, ByVal lhostent.h_addr_list, 4)
Call MoveMemory(lSinAddr, ByVal lAddrList, lhostent.h_length)
'sockaddr構造体設定
msockaddr.sin_family = AF_INET
msockaddr.sin_port = htons(port)
msockaddr.sin_addr = lSinAddr
msockaddr.sin_zero = String$(8, 0)
'Connect
ret = connect(msocket, msockaddr, Len(msockaddr))
'WSAAsyncSelect
ret = WSAAsyncSelect(msocket, hwnd, WM_USER, FD_READ Or FD_CLOSE Or FD_CONNECT Or FD_WRITE Or FD_ACCEPT)
'recv
ret = recv(msocket, buf, Len(buf), 0)
bufはString * 1024で定義しています
'send
lenbuf = Len("USER username")
buf() as byte = StrConv(strCommand, vbFromUnicode)
ret = send(msocket, buf(0), lenbuf, 0)
お礼
お~すげ~ 大変助かりました。 ありがとうございました。