*由于vfp不提供二進制類型的變量定義,在用winsock.ocx控件傳送非文本文件時,就必須解決ASCII碼大于128的字符傳送問題,可喜的系vfp8.0版的一個函數(shù)strconv相對以前版本增加了兩個參數(shù)13,14(具體用法vfp8幫助文件),為使用winsock控件傳送非文本文件提供了一個解決方法,以下主要列出關(guān)鍵部分,winsock具體用法各位請參見論壇中的示例,以下示例重要的地方我作了標記。
**1、在server(服務端)表單winsock控件dataarrive事件中:
strdata=Space(bytestotal)
Thisform.sock1.Object.GetData(@strdata)
binstr=Strconv(strdata,14) &&&&要點
newFile="d:\winscok\123\newfile.dbf" &&&&保存文件名
If File(newFile) newFhn=Fopen(newFile,2)
Else newFhn=Fcreate(newFile)
Endif=Fseek(newFhn,0,2)
=Fwrite(newFhn,binstr)
=Fclose(newFhn)
*2、在cliente(客戶端)表單command(發(fā)送文件)按鈕控件click事件中:
mFile="M:\VFP精華\VFP7中文精簡版.exe" &&&&要傳送的文件
If !File(mFile)
Wait "沒有發(fā)現(xiàn)文件!" Wind
retuendifmFhn=Fopen(mFile)
If mFhn<0
Wait "文件打開失??!" wind
RETURNENDIFmFsize=Fseek(mFhn,0,2)
mFor=Iif(Mod(mFsize,6000)>0,Int(mFsize/6000)+1,Int(mFsize/6000)) &&&&注:6000系由于filetostr函數(shù)字節(jié)限制
For i=1 To mFor =Fseek(mFhn,6000*i-6000)
mStr=Fread(mFhn,6000)
newFile="d:\winscok\123\mfile.tmp"
newFhn=Fcreate(newFile)
=Fwrite(newFhn,mStr)
=Fclose(newFhn)
mStr=Filetostr(newFile) &&&&要點
strbin=Strconv(mStr,13) &&&&要點
Thisform.sock1.Object.senddata(strbin)
Endfor
=Fclose(mFhn)Thisform.list1.AddItem("文件傳送完畢!")
ENDIF
ENDIF
PS: 代碼沒有經(jīng)過測試