;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
涓涓猄ocket浼犺緭鏂囦欢鐨勪緥瀛 - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> VC >> 閫氫俊缃戠粶 >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

涓涓猄ocket浼犺緭鏂囦欢鐨勪緥瀛

鍙戝竷: 2008-6-26 12:23 |  浣滆: admin |   鏌ョ湅: 86娆

鏃堕棿闂锛屽湪杞浇杩欎釜浠g爜鍓嶏紝娌℃湁缁忚繃娴嬭瘯锛屽ぇ瀹惰嚜宸辨祴璇曚竴涓嬶紝濡傛灉鏈変粈涔堥棶棰橈紝鍐嶈窡鎴戜滑鑱旂郴銆

//1锛氭樉绀烘枃浠惰繘搴

//2锛氬彲浠ラ殢鏃剁粓姝紶杈撹繃绋

//鍙戦佹暟鎹嚎绋

UINT SendDataThread(LPVOID lpParam);

//鎺ユ敹鏁版嵁绾跨▼

UINT ReceiveDataThread(LPVOID lpParam);

//鍙戦佹暟鎹寜閽秷鎭搷搴斿嚱鏁

void CTzg004Dlg::OnButtonSend()

{

// TODO: Add your control notification handler code here

//鍒濆鍖栨暟鎹彂閫佺粨鏉熸爣蹇

m_bSendEnd=FALSE;

//鍒濆鍖栨暟鎹帴鏀剁粨鏉熸爣蹇

m_bRecEnd=FALSE;

//鏇存柊瀵硅瘽妗嗘暟鎹

UpdateData(TRUE);

//鎵撳紑鏂囦欢瀵硅瘽妗

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWR99vEPROMPT,

"鎵鏈夋枃浠 (*.*)|*.*||");

if(dlg.DoModal()==IDOK)

{

m_strFileName=dlg.GetPathName();

//寮濮嬪彂閫佹暟鎹嚎绋

AfxBeginThread(SendDataThread,this,THREAD_PRIOR99vY_NORMAL);

}

}

//鎺ユ敹鏁版嵁鎸夐挳娑堟伅鍝嶅簲鍑芥暟

void CTzg004Dlg::OnButtonReceive()

{

// TODO: Add your control notification handler code here

//鍒濆鍖栨暟鎹彂閫佺粨鏉熸爣蹇

m_bSendEnd=FALSE;

//鍒濆鍖栨暟鎹帴鏀剁粨鏉熸爣蹇

m_bRecEnd=FALSE;

UpdateData(TRUE);

//寮濮嬫帴鏀舵暟鎹嚎绋

AfxBeginThread(ReceiveDataThread,this,THREAD_PRIOR99vY_NORMAL);

}

//缁堟鍙戦佹寜閽秷鎭搷搴

void CTzg004Dlg::OnButtonSendEnd()

{

// TODO: Add your control notification handler code here

//璁剧疆鍙戦佹暟鎹粨鏉熸爣蹇

m_bSendEnd=TRUE;

}

//缁堟鎺ユ敹鎸夐挳娑堟伅鍝嶅簲

void CTzg004Dlg::OnButtonRecEnd()

{

// TODO: Add your control notification handler code here

//璁剧疆鎺ユ敹鏁版嵁缁撴潫鏍囧織

m_bRecEnd=TRUE;

}

UINT SendDataThread(LPVOID lpParam)

{

CTzg004Dlg *pDlg=(CTzg004Dlg *)lpParam;

CFile file;

if( !file.Open(pDlg->m_strFileName, CFile::modeRead) )

{

AfxMessageBox("鎵撳紑鏂囦欢鍑洪敊锛");

return 0;

}

CSocket sockTemp;

CString str,str1;

sockTemp.Create(pDlg->m_iDataPort1); //寰楀埌绔彛鍙

sockTemp.Listen(1);//鍙帴鍙椾竴涓繛鎺

CSocket sockSend;

//璁剧疆鍙戦佹寜閽姝

pDlg->GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(FALSE);

sockTemp.Accept(sockSend);//娉ㄦ剰锛宻ockTemp宸蹭氦浜嗚嚜宸辩殑鎸囬拡鍦板潃鍒皊ockSend锛屾晠涓嶇敤Close

//鎵撳紑鍙戦佺粓姝㈡寜閽

pDlg->GetDlgItem(IDC_BUTTON_SEND_END)->EnableWindow(TRUE);

int iBufSize = 1024 * 5;

int iSize = iBufSize;

LPBYTE pBuf = new BYTE[iBufSize];

DWORD dwTemp = 0;

BOOL bTest = sockSend.AsyncSelect(0);//鐢变簬CSocket瀹為檯鏄紓姝ワ紝灏嗗畠鍙樹负鍚屾锛堥樆濉烇級鏂瑰紡銆

sockSend.IOCtl( FIONBIO, &dwTemp);//鐢↖OCtl瑕佸皢AsyncSelect鐨勭涓涓弬鏁颁负0锛屽弬鐪婱SDN

UINT uiLength = file.GetLength();

sockSend.Send(&uiLength, 4);//浼犻佹枃浠跺ぇ灏忓埌鎺ユ敹鏂癸紙Client绔級

int iNumByte;

UINT uiTotal = 0;

while(uiTotal < uiLength)

{

int iEnd=pDlg->m_bSendEnd;

//浼犻佸彂閫佺鐘舵侊紙鏄惁缁撴潫锛

iNumByte = sockSend.Send(&iEnd, sizeof(int));

//鍙戦侀敊璇

if(iNumByte == SOCKET_ERROR)

{

AfxMessageBox("鍙戦侀敊璇紒");

goto ExitLable1;

}else if(iEnd==1)//鍙戦佺缁堟

{

AfxMessageBox("鍙戦佺缁堟");

goto ExitLable1;

}

//璇诲彇鏂囦欢鍐呭

if((int)(uiLength - uiTotal) < iBufSize)

iSize = uiLength - uiTotal;//褰撳皬浜庣紦鍐插尯iTEST鏃剁殑澶勭悊

iSize=file.Read(pBuf , iSize);//寰楀埌璇诲彇鐨勫瓧鑺傛暟

int iCount=0;

//鍙戦佸畾闀挎枃浠舵暟鎹

while(iCount

{

iNumByte = sockSend.Send(pBuf, iSize-iCount);//娉ㄦ剰iNumByte涓哄疄闄呯殑鍙戦佸瓧鑺傛暟锛屼笉瑕佷互iSize涓哄噯

if(iNumByte == SOCKET_ERROR)

{

AfxMessageBox("鍙戦侀敊璇紒");

goto ExitLable1;

}

iCount+=iNumByte;

if(iCount

{

file.Seek(iSize-iCount,CFile::current);

}

}

uiTotal += iCount;

//璁剧疆鍙戦佹暟鎹繘搴︽潯

pDlg->m_CtrlProgressSend.SetPos(int(((double)uiTotal/uiLength)*100));

str.Format("鍙戦佽繘搴︼細%d%%",int(((double)uiTotal/uiLength)*100));

//琛ㄦ槑鍙戦佹暟鎹櫨鍒嗘瘮

pDlg->GetDlgItem(IDC_STATIC_SEND)->GetWindowText(str1);

if(str1!=str)

pDlg->GetDlgItem(IDC_STATIC_SEND)->SetWindowText(str);

}

//鍙戦佹枃浠舵垚鍔

AfxMessageBox("鍙戦佹枃浠舵垚鍔燂紒");

ExitLable1:

delete[] pBuf;

file.Close();

sockSend.Close();

pDlg->m_CtrlProgressSend.SetPos(0);//鎭㈠杩涘害

pDlg->GetDlgItem(IDC_BUTTON_SEND_END)->EnableWindow(FALSE);//璁剧疆鍙戦佺粨鏉熸寜閽姝

pDlg->GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(TRUE);//璁剧疆鍙戦佹寜閽甯

pDlg->GetDlgItem(IDC_STATIC_SEND)->SetWindowText("鍙戦佽繘搴︼細"); //鎭㈠鎻愮ず杩涘害

return 0;

}

UINT ReceiveDataThread(LPVOID lpParam)

{

CTzg004Dlg *pDlg=(CTzg004Dlg *)lpParam;

//淇濆瓨鏂囦欢瀵硅瘽妗

CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWR99vEPROMPT,

"鎵鏈夋枃浠 (*.*)|*.*||");

while(dlg.DoModal()!=IDOK)

{

AfxMessageBox("閫夋嫨鏂囦欢鍑洪敊锛岃閲嶆柊閫夋嫨锛");

}

CString str,str1,str2;

CSocket sockRecv;

sockRecv.Create();

pDlg->m_CtrlIPSend.GetWindowText(str);//寰楀埌鍙戦佺IP鍦板潃

pDlg->GetDlgItem(IDC_BUTTON_RECEIVE)->EnableWindow(FALSE);//绂佹鎺ユ敹鎸夐挳

while(sockRecv.Connect(str,pDlg->m_iDataPort2)==0)//杩炴帴鍙戦佹柟鍦板潃锛岃嫢涓婄綉锛屽彲鏀逛负瀹為檯IP鍦板潃锛岀鍙h璺烻erver绔浉鍚屻

{

Sleep(50);

}

pDlg->GetDlgItem(IDC_BUTTON_REC_END)->EnableWindow(TRUE);//鎵撳紑缁堟鎺ユ敹鎸夐挳

str2=dlg.GetPathName();//寰楀埌鏂囦欢鍚

CFile file;

file.Open(str2, CFile::modeCreate | CFile::modeWrite);

BOOL bFileFail=FALSE;

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆