当前位置:编程学习 > wap >>

用WinInet做的FTP操作,为什么在Windows Mobile下会有问题(急救)

请路过的同行不吝赐教,万分感谢

下面代码使用的是VB.Net
这个程序在WindowsXP下试了下是可以跑的,相应的get/put的操作也都能成功,
但是在手机模拟器下(VS2005自带的模拟器,选择Windows mobile6)在执行到InternetConnect的时候
返回的句柄是0。我试验的环境下手机模拟器的IE是可以上网的。

Public Class Form1
    '首先加载wininet.dll里的函数
    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
    ByVal sAgent As String, _
    ByVal lAccessType As Int32, _
    ByVal sProxyName As String, _
    ByVal sProxyBypass As String, _
    ByVal lFlags As Integer) As Int32

    Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
    ByVal hInternetSession As Int32, _
    ByVal sServerName As String, _
    ByVal nServerPort As Integer, _
    ByVal sUsername As String, _
    ByVal sPassword As String, _
    ByVal lService As Int32, _
    ByVal lFlags As Int32, _
    ByVal lContext As System.IntPtr) As System.IntPtr

    Private Declare Function InternetCloseHandle Lib "WININET.DLL" _
    (ByVal HINTERNET As System.IntPtr) As Integer

    Private Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" _
    (ByVal hConnect As System.IntPtr, _
    ByVal directory As String, _
    ByRef bufferLength As Integer) As Boolean

    Private Declare Function FtpGetFile Lib "WININET.DLL" Alias "FtpGetFileA" _
    (ByVal hConnect As Int32, ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Int32, _
    ByVal dwFlags As Int32, ByVal dwContext As Int32) As Int32

    Private Declare Function FtpPutFile Lib "WININET.DLL" Alias "FtpPutFileA" _
    (ByVal hConnect As Int32, ByVal lpszLocalFile As String, _
    ByVal lpszNewRemoteFile As String, _
    ByVal dwFlags As Int32, ByVal dwContext As Int32) As Int32


    '  variable for win32 function 
    Dim hOpen As Int32
    Dim hConnection As System.IntPtr
    Dim BoolDir As Boolean
    Dim StrDir As String
    Dim LenDir As Integer
    Dim Reget As Int32
    Dim Reput As Int32

‘下面是做FTP操作的程序
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        hOpen = InternetOpen(vbNullString, 1, vbNullString, vbNullString, vbNull)
        'hOpen = InternetOpen(vbNullString, 3, vbNullString, "192.168.5.40", vbNull)
        If hOpen <> 0 Then
            TextBox2.Text = hOpen
            hConnection = InternetConnect(hOpen, "192.168.1.100", 21, "temp", "temp,123", 1, 0, 0)
            If hConnection <> 0 Then
                TextBox3.Text = hConnection
                BoolDir = FtpGetCurrentDirectory(hConnection, StrDir, LenDir)
                Reget = FtpGetFile(hConnection, "server.xml", "E:\server.xml", False, 128, 1, 0)
                Reput = FtpPutFile(hConnection, "E:\IP.txt", "IP.txt", 1, 0)
            Else
                TextBox1.Text = "Internet Connection error"
                TextBox3.Text = hConnection
            End If
        Else
            TextBox1.Text = "Internet Open error"
            TextBox2.Text = hOpen
        End If

        If hConnection <> 0 Then
            InternetCloseHandle(hConnection)
        End If
        If hOpen <> 0 Then
            InternetCloseHandle(hOpen)
        End If
    End Sub

顺便问下怎么取得Windows mobile系统下的手机的文件路径 --------------------编程问答-------------------- 你用手机能上网的话,应该是DMA模式.
在你的模拟器设备上,将连接改成TCP连接传输看看.
具体:工具->选项->设备工具->设备->属性. --------------------编程问答-------------------- 试试 InternetOpenUrl --------------------编程问答--------------------
引用 1 楼 bsr2009 的回复:
你用手机能上网的话,应该是DMA模式.
在你的模拟器设备上,将连接改成TCP连接传输看看.
具体:工具->选项->设备工具->设备->属性.


1.我用的确实是DMP模式(详见截图)


2.“将连接改成TCP连接传输”这个是在哪里设置的,我在模拟器配置里(如下图)找不到相应的
工具->选项->设备工具->设备->属性.

1楼的大侠能不能给各截图给我
--------------------编程问答--------------------
引用 2 楼 wang_junjie 的回复:
试试 InternetOpenUrl


InternetOpenUrl的格式应该是
InternetOpenUrl(InternetOpen返回的句柄,ftp地址,http的包头,包头长度,flag,context)
这样的话ftp的“ID”和“密码”在哪里输入?
msdn里貌似是有写InternetOpenUrl能操作ftp的“Opens a resource specified by a complete FTP or HTTP URL.”(出自http://msdn.microsoft.com/en-us/library/aa385098(v=VS.85).aspx)

wang_junjie兄能不能给个具体的用InternetOpenUrl操作ftp的流程
--------------------编程问答--------------------
引用 3 楼 ztx8303 的回复:
引用 1 楼 bsr2009 的回复:
你用手机能上网的话,应该是DMA模式.
在你的模拟器设备上,将连接改成TCP连接传输看看.
具体:工具->选项->设备工具->设备->属性.


1.我用的确实是DMP模式(详见截图)


2.“将连接改成TCP连接传输”这个是在哪里设置的,我在模拟器配置里(如下图)找不到相应的
工具->选项->设备工具->设备->属性.

1楼的……

我说的是VS2005下..... 不是模拟器. --------------------编程问答-------------------- 试了“工具->选项->设备工具->设备->属性.”然后改成TCP的方法。用来这个以后再用activesync4.5来同步还是不行,如果不用activesync4.5这个工具的话遇到了"ConmanClient2.exe"找不到的问题,后来根据网上的信息搞了半天也没什么结果。bsr2009兄有什么不用activesync4.5这个工具上网的方法吗,或者给点mobile开发方面完整点的书或资料。
补充:移动开发 ,  超极本开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,