电竞比分网-中国电竞赛事及体育赛事平台

分享

VFP 用winsock控件轉(zhuǎn)送文件

 Alkaid2015 2012-07-26
轉(zhuǎn)載自 794334
最終編輯 lianwuyi

*由于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)過測試

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多