本軟體使用
mfc採用物件導向的方法實現了基於
socket
的檔案傳輸。這是原來研究生課程的結課作業,實現了socket的傳送和接收,以及讀取ini配置檔案等操作。使用了csocket類
以下是當時結課作業
的正文:
一.軟體特點如下:
1.採用了多執行緒的方法,檔案傳輸時使用
afxbeginthread()
開啟新執行緒
void
cclientsockdlg::onbnclickedsend()
檔案的傳送和接收都開起了新執行緒
uintthread_send(lpvoid lpparam)
2.支援從配置檔案
configuration.ini
中獲取伺服器引數
採用getprivateprofilestring()
和getprivateprofileint()
分別獲取位於
serverconfiguration.ini
檔案中的
string
型別的ip
和int
型別的port
cstring ip;
intport;
getprivateprofilestring
(l"serverconfiguration",l"ip",l"
沒有讀取到資料
!",ip.getbuffer(10),10,l".\\configuration.ini");
port=getprivateprofileint(l"serverconfiguration",l"port",0,l".\\configuration.ini");
3.採用了物件導向的設計方式,功能之間按模組劃分
mfc本身具有良好的物件導向的特性,本程式嚴格按照
mfc框架結構編寫**,每個按鈕對應乙個功能函式,降低了**之間的耦合性,有利於程式的擴充套件和復用。
void
cserversockdlg::onbnclickedchoose()
void
cserversockdlg::onbnclickedsend()
void
cserversockdlg::onbnclickedrecvdata()
void
cserversockdlg::onbnclickedabout()
void
cserversockdlg::onbnclickedwriteini()
4.採用了
csocket
類,**相對更簡單
csocket
類是mfc
框架對socket
程式設計中的
winsockapi
的封裝,因此通過這個類管理收發資料更加便利。**也跟那個既簡單易懂。
//建立
if(!clientsock.socket())
//連線if(!clientsock.connect(ip,port))
else
file.close();
delete szbuff;
clientsock.close();
(dlg->getdlgitem(idc_send))->enablewindow(true);
afxmessagebox(_t("
檔案傳送成功
"));
dlg->setdlgitemtextw(idc_filepathname,_t(""));
}return 0;
5.支援資料在伺服器與客戶端之間雙向傳輸
本程式不但可以從客戶端往伺服器端傳檔案,而且可以從伺服器端往客戶端傳檔案。
但是互傳檔案的方式並不是完全相同的。
伺服器端不管是接收檔案還是傳送檔案始終是對繫結的埠進行監聽。
//繫結
if(!serversock.bind(port))
//監聽
if(!serversock.listen(10))
客戶端不管是接收檔案還是傳送檔案始終是進行連線。
if(!clientsock.connect(ip,port))
else
cstring ip;
int port;
getprivateprofilestring(l"serverconfiguration",l"ip",l"沒有讀取到資料!",ip.getbuffer(100),100,l".\\configuration.ini");
port=getprivateprofileint(l"serverconfiguration",l"port",0,l".\\configuration.ini");
//建立
if(!clientsock.socket())
//連線
// if(!clientsock.connect(_t("127.0.0.1"),8088))
if(!clientsock.connect(ip,port))
else
uint nsize = 0;
uint nsend = 0;
char *szbuff=null;
//傳送
while(nsizegetdlgitem(idc_send))->enablewindow(true);
afxmessagebox(_t("檔案傳送成功"));
dlg->setdlgitemtextw(idc_filepathname,_t(""));
} return 0;
}以及伺服器端使用csocket監聽的**:
//----------------------------監聽檔案的執行緒------------------------------
uint thread_func(lpvoid lpparam) //接收檔案的執行緒函式
cstring ip;
int port;
getprivateprofilestring(l"serverconfiguration",l"ip",l"沒有讀取到資料!",ip.getbuffer(100),100,l".\\configuration.ini");
port=getprivateprofileint(l"serverconfiguration",l"port",0,l".\\configuration.ini");
char errbuf[100]=;// 臨時快取
systemtime t; //系統時間結構
cfile logerrorfile;
if(!logerrorfile.open(_t("logerrorfile.txt"),cfile::modecreate|cfile::modereadwrite))
csocket serversock;
csocket clientsock;
//建立
if(!serversock.socket())
bool boptval = true;
int boptlen = sizeof(bool);
serversock.setsockopt(so_reuseaddr,(void *)&boptval,boptlen,sol_socket);
//繫結
if(!serversock.bind(port))
//監聽
if(!serversock.listen(10))
getlocaltime(&t);
t.whour,t.wminute,t.wsecond);
int len = strlen(errbuf);
logerrorfile.write(errbuf,len);
afxmessagebox(_t("啟動成功等待接收檔案"));
while(1)
else
}return 0;
}
基於Socket的檔案傳輸(使用CSocket類)
本軟體使用 mfc採用物件導向的方法實現了基於 socket 的檔案傳輸。這是原來研究生課程的結課作業,實現了socket的傳送和接收,以及讀取ini配置檔案等操作。使用了csocket類 以下是當時結課作業 的正文 一 軟體特點如下 1.採用了多執行緒的方法,檔案傳輸時使用 afxbeginthr...
基於Socket的檔案傳輸(使用CSocket類)
本軟體使用 mfc採用物件導向的方法實現了基於 socket 的檔案傳輸。這是原來研究生課程的結課作業,實現了socket的傳送和接收,以及讀取ini配置檔案等操作。使用了csocket類 以下是當時結課作業 的正文 一 軟體特點如下 1.採用了多執行緒的方法,檔案傳輸時使用 afxbeginthr...
基於socket的檔案傳輸協議
1 我們先搭建乙個乙個伺服器與客戶機並使他們進行通訊 2 在客戶機中對輸入的指令進行判斷,將指令轉化成對應的列舉型別傳送給服務機 3 服務機對傳送過來的ftp cmd的值進行判斷,並執行相對應的功能 4 ls功能的實現 通過popen實現,獲取內容傳送客戶機並顯示 get 對指令進行分割,讀取分割後...