用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.我用的确实是DMP模式(详见截图)
2.“将连接改成TCP连接传输”这个是在哪里设置的,我在模拟器配置里(如下图)找不到相应的
工具->选项->设备工具->设备->属性.
1楼的大侠能不能给各截图给我
--------------------编程问答--------------------
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的流程
--------------------编程问答--------------------
我说的是VS2005下..... 不是模拟器. --------------------编程问答-------------------- 试了“工具->选项->设备工具->设备->属性.”然后改成TCP的方法。用来这个以后再用activesync4.5来同步还是不行,如果不用activesync4.5这个工具的话遇到了"ConmanClient2.exe"找不到的问题,后来根据网上的信息搞了半天也没什么结果。bsr2009兄有什么不用activesync4.5这个工具上网的方法吗,或者给点mobile开发方面完整点的书或资料。
补充:移动开发 , 超极本开发