




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、?網(wǎng)絡(luò)程序設(shè)計(jì)?課程設(shè)計(jì)報(bào)告書題目:局域網(wǎng)文件傳輸與消息通信專業(yè):網(wǎng)絡(luò)工程學(xué)號:20211423學(xué)生姓名:史政法指導(dǎo)教師:魏寧完成日期:2021年06月06日一、題目及要求Window程序設(shè)計(jì)的根本要求:1 .熟練掌握網(wǎng)絡(luò)的根本概念和原理;2 .熟練掌握網(wǎng)絡(luò)編程接口Socket概念及編程原理;3 .掌握基于TCP/IP的Internet編程技術(shù);4 .掌握各種軟件開發(fā)工具的使用過程及方法.本實(shí)例程序的技術(shù)要點(diǎn)是:如何從CasyncSocket類派生出自己的WinSock類.理解WinSock類與應(yīng)用程序框架的關(guān)系.重點(diǎn)學(xué)習(xí)流式套接字對象的使用.處理網(wǎng)絡(luò)事件的方法.二、系統(tǒng)概要設(shè)計(jì)1、CSock
2、et類的介紹在MFC中,為了提供面向?qū)ο蟮木幊谭绞蕉庋b了兩個(gè)WinSock類:一個(gè)是CAsyncSocket類,另一個(gè)是CSocket類.他們的不同點(diǎn)在于前者使用的是非阻塞模式操作,而后者可以支持阻塞模式的I/O操彳KCSocket類是從CAsyncSocket類中繼承來的,他為程序員提供了更高級的抽象性.由于CSocket類和CArchive類一起使用,并且治理了通訊的大多數(shù)操作,從而使程序員從網(wǎng)絡(luò)編程的底層細(xì)節(jié)中解脫了出來,不必使用CAsyncSocket的一些成員函數(shù)和一些WindowsSocketAPI函數(shù)來處理通信問題.共同使用CSocket和CArchive類對象進(jìn)行編程是最簡單
3、的WinSock編程模式.下面是使用CSocket類進(jìn)行網(wǎng)絡(luò)通信的過程(1) 構(gòu)造CSocket類對象(2) 用CSocket類對象的Create函數(shù)創(chuàng)立WindowsSocket,Create()函數(shù)會調(diào)用Bind()函數(shù)將此函數(shù)綁定的指定的地址和端口.(3) Socket創(chuàng)立完畢后,Listen()函數(shù)在效勞器端進(jìn)行監(jiān)聽客戶的連接請求.(4) 在這一步,效勞器端調(diào)用Accept0函數(shù)對客戶端發(fā)來的請求進(jìn)行接受和處理,而客戶端那么調(diào)用Connect()函數(shù)向效勞器發(fā)出連接請求.(5) 在客戶端和效勞器端的數(shù)據(jù)傳輸完成后,應(yīng)該分別在兩邊銷毀創(chuàng)立的CSocket對象.2、編程思路和工程實(shí)現(xiàn)用MF
4、CAppWizard新建一個(gè)給予對話框的工程,在第三步中添加WindowsSocketS的十穴住.米開【J松件IDCapiiun丁工11人上v/kc+a+ictovfH11IDIDC_STATIC/Ki卡口口in,日于九小siaiiciexiv/kc+a+ictovfIDC_STATIC_SERVPORT,八兒FIJip.蘿I在接的in日于九小siaiiciexiv/kc+a*icfovfIDC_STATIC_MSG玄旺1女口Jip.消自日于九4siaiiciexiIDC_MYIP1F3ip叫川binierneiaddIDC_YOURIPip地址inierneiadd幺扃左號木匹priithe
5、xIDC_EDIT_MSG“ULH耳l/euiiuoxhiittcnIDC_BUIIONCONNECT啟動npYjjaknuuiiunhiittnnIDC_BUIION_DISCONNE關(guān)閉npvjJaknuuiiunIDC_BUTTON_SENDMSGu|y也位UuiiunIDC_BUIION_SEND_FIL友透們思叩望也位Uuiiun土方TTh14ccIDC_BUTTON_STOP1透乂件/吉t./力;王uiv修班UuiiunhiittonIDCANCELnpYjjaknuuiiun進(jìn)程prucessIDC_PROGRESS_SEND_F支持,建立的程序界面如右圖:圖1一程序主對話框中的
6、控件屬性MessageMapsMemberVariables|Aulomatian|ActiveXEvents|ClassInfo|Control1D&TypeMemberIDCBUTTONDISCONNECTIDCBUTTONSENDFILEIDCBUTTONSENDMSGIDCBUTTONSTOPIDCBUTTONCONNECTIDCEDITMSGCStringmMsgSendIDCMYIPCIPAddressCtrtmMylpIDCPROGRESSSENDFILECProgressCtrlmProgress|lDCYOUHIPClFAddressCtrfmYourlpEmjed:
7、Passname:AddClass.,nieiran:|cFll£tranDlg*AddVariable.DX.JIFiletranDIfl.h,D:l八Filetr注nDlg>cpp二IDCANCELDeleteVariableDescription:maptoCIPAddressCtrlmember0inoluv圖2對話框中的控件對象定義相應(yīng)的成員變量編程思路:首先在對話框中輸入要連接的IP地址,然后單擊“啟動按鈕,要連接的主機(jī)也做相同的操作,兩邊都準(zhǔn)備完事后,兩臺計(jì)算機(jī)就可以消息和文件的傳輸了.單擊“啟動按鈕時(shí),處理函數(shù)啟動了監(jiān)聽線程來啟動效勞,主要的語句如下:pThre
8、adListen=:AfxBeginThread(_ListenTcpThread,this);點(diǎn)擊“發(fā)送消息按鈕時(shí),處理函數(shù)啟動了消息發(fā)送線程來進(jìn)行消息的傳送,語句如下:pThreadSendMsg=:AfxBeginThread(_SendMsgThread,this);當(dāng)點(diǎn)擊“傳送文件按鈕時(shí),處理函數(shù)啟動了文件傳輸線程來進(jìn)行文件傳輸,語句如下:pThreadSendMsg=:AfxBeginThread(_SendFileThread,this);下面主要介紹一下要用到的三個(gè)線程和一個(gè)文件接收處理函數(shù).首先要產(chǎn)生三個(gè)線程對象:CWinThread_ListenTcpThread;CWin
9、Thread_SendFileThread;CWinThread_SendMsgThread;三、系統(tǒng)詳細(xì)設(shè)計(jì)1 .監(jiān)聽線程函數(shù)UINT_ListenTcpThread(LPVOIDlparam)CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockSrvr;pDlg->m_Potr=PORT;保存當(dāng)前使用端口,用于關(guān)閉intcreateSucceed=sockSrvr.Create(pDlg->m_Potr);if(createSucceed=0)AfxMes
10、sageBox("_ListenTcpThreadCreate錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;intlistenSucceed=sockSrvr.Listen();開始監(jiān)聽if(listenSucceed=0)(AfxMessageBox("_ListenTcpThreadListen錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;CSocketrecSo;SOCKADDR_INclient;intiAddrSize=sizeof(client);
11、intacceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR*)&client,&iAddrSize);接受連接并取得對方IPif(acceptSucceed=0)(AfxMessageBox("_ListenTcpThreadAccept錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;sockSrvr.Close();/關(guān)閉charflagFLAG=0;if(recSo.Receive(flag,FLAG)!=2)return-1;pDlg->m_type=flag0;
12、if(pDlg->m_type='D')return0;pThreadListen=:AfxBeginThread(_ListenTcpThread,pDlg);pDlg->ReceiveFileMsg(recSo,client);return0;2 .傳送文件線程函數(shù)UINT_SendFileThread(LPVOIDlparam)CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CSt
13、ringip;pDlg->m_YourIp.GetWindowText(ip);sockClient.Connect(ip,PORT);首先發(fā)送標(biāo)記F為文件,2intend=0;end=sockClient.Send("F",FLAG);/發(fā)送標(biāo)志是否成功if(end=SOCKET_ERROR)AfxMessageBox("_SendFileThreadSend錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)AfxMessageBox("文件頭錯(cuò)誤");r
14、eturn-1;/CFilemyFile;FILEINFOmyFileInfo;if(!myFile.Open(pDlg->m_fileName,CFile:modeRead|CFile:typeBinary)return-1;myFileInfo.fileLength=myFile.GetLength();/得到文件大小strcpy(myFileInfo.fileName,myFile.GetFileName();/得到文件名稱sockClient.Send(&myFileInfo,sizeof(myFileInfo);發(fā)送文件信息pDlg->m_Progress.Set
15、Range32(0,myFileInfo.fileLength);myFile.Seek(0,CFile:begin);charm_bufSIZEFILE=0;CStringstrError;intnum=0;end=0;inttemp=0;for(;)if(pDlg->FileWork=false)pDlg->FileWork=true;pDlg->GetDlgItem(IDCANCEL)->EnableWindow(false);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);)n
16、um=myFile.Read(m_buf,SIZEFILE);if(num=0)break;end=sockClient.Send(m_buf,num);temp+=end;pDlg->m_Progress.SetPos(temp);if(pDlg->FileStop=true)pDlg->FileStop=false;pDlg->FileWork=false;break;)if(end=SOCKET_ERROR)AfxMessageBox("_SendFileThreadSend錯(cuò)誤!"+pDlg->GetError(GetLastError
17、();break;)pDlg->m_Progress.SetPos(0);CStringstrLocalName;pDlg->GetLocalHostName(strLocalName);CStringstrLocalIP;pDlg->GetIpAddress(strLocalName,strLocalIP);if(temp=myFileInfo.fileLength)AfxMessageBox("文件發(fā)送成功");elseAfxMessageBox("文件發(fā)送失敗");myFile.Close();sockClient.Close()
18、;pDlg->FileWork=false;pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);pDlg->GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);pDlg->GetDlgItem(IDCANCEL)->EnableWindow(true);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;)3.發(fā)送消息線程函數(shù)UINT_Sen
19、dMsgThread(LPVOIDlparam)/TCP發(fā)送信息線程CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip,strError;pDlg->m_YourIp.GetWindowText(ip);intconn=sockClient.Connect(ip,PORT);if(conn=0)/AfxMessageBox("_SendMsgThreadConnect錯(cuò)誤!"
20、;+pDlg->GetError(GetLastError();sockClient.ShutDown(2);sockClient.Close();AfxEndThread(1L);return0;首先發(fā)送標(biāo)記M為信息,2intend=0;end=sockClient.Send("M",FLAG);if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)AfxMessageBox
21、("消息頭錯(cuò)誤");return-1;CStringstrMsg=pDlg->message;end=sockClient.Send(strMsg,strMsg.GetLength();if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;inti=0;sockClient.Close();return0;4.文件接收處理函數(shù)intCFiletranDlg:SaveYourFile(CSocket&
22、;recSo,SOCKADDR_IN&client)CStringfname;CFileDialogdlg(false);另存文件FILEINFOmyFileInfo;recSo.Receive(&myFileInfo,sizeof(FILEINFO);intfileLength=myFileInfo.fileLength;CStringstrfileIp,strfileName,strfileLength;strfileIp.Format(inet_ntoa(client.sin_addr);strfileName.Format(myFileInfo.fileName);st
23、rfileLength.Format("%f",myFileInfo.fileLength/1024.0);CStringtitle="文件"+strfileName+"大小"+strfileLength+"KB"+"來在"+strfileIp+"是否接受"dlg.m_ofn.lpstrTitle=title;/標(biāo)題條charfileme500=0;必須足夠大小strcpy(fileme,strfileIp+strfileName);dlg.m_ofn.lpstrFile=f
24、ileme;文件名稱if(dlg.DoModal()=IDOK)fname=dlg.GetPathName();得到文件名名稱、路徑GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_SHOW);elseGetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);GetDlgItem(IDCANCEL)->EnableWindow(true);recSo.Close
25、();return0;charbufSIZEFILE=0;CFilef(fname,CFile:modeCreate|CFile:modeWrite);存文件m_Progress.SetRange32(0,fileLength);intn=0;接受的字節(jié)數(shù)0表示結(jié)束inttemp=0;GetDlgItem(IDCANCEL)->EnableWindow(false);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);for(;)n=recSo.Receive(buf,SIZEFILE);接受if(n=0)/0表示結(jié)束bre
26、ak;接受完畢f(xié).Write(buf,n);temp+=n;m_Progress.SetPos(temp);if(FileWork=false)FileWork=true;if(FileStop=true)FileStop=false;FileWork=false;break;f.Close();m_Progress.SetPos(0);if(temp=fileLength)MessageBox("文件接受成功");elseMessageBox("文件接受失敗");FileWork=false;GetDlgItem(IDC_PROGRESS_SEND_F
27、ILE)->ShowWindow(SW_HIDE);GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);GetDlgItem(IDCANCEL)->EnableWindow(true);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;四、課程設(shè)計(jì)總結(jié)采用多線程方法,利用MFC的CSocket類,可以簡單方便的實(shí)現(xiàn)計(jì)算機(jī)用戶間的文件傳輸和消息發(fā)送功能.以上的程序在VisualC+6.0環(huán)境編譯通過,并且在學(xué)校機(jī)房內(nèi)(本機(jī)和本機(jī)、本機(jī)和他機(jī)之間)測試能到
28、達(dá)根本的要求.當(dāng)然我們可以通過繼續(xù)增加線程來進(jìn)一步拓展程序的功能.指導(dǎo)教師評語:成績:指導(dǎo)教師:添加的代碼:#include"stdafx.h"#include"Filetran.h"#include"FiletranDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE口=_FILE_;#endif#definePORT34567#defineSIZEFILE1024#defineFLAG2CWinThread*pThreadSendFile;C
29、WinThread*pThreadListen;CWinThread*pThreadSendMsg;CFiletranDlg二CFiletranDlg(CWnd*pParent/*=NULL*/):CDialog(CFiletranDlg:IDD,pParent)/AFX_DATA_INIT(CFiletranDlg)m_MsgSend=_T("");message=_T("");/AFX_DATA_INIT/NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGet
30、App()->LoadIcon(IDR_MAINFRAME);FileWork=FileStop=false;StopServer=false;voidCFiletranDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CFiletranDlg)DDX_Control(pDX,IDC_PROGRESS_SEND_FILE,m_Progress);DDX_Control(pDX,IDC_YOURIP,m_YourIp);DDX_Control(pDX,IDC_MYIP,m_MyIp)
31、;DDX_Text(pDX,IDC_EDIT_MSG,m_MsgSend);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CFiletranDlg,CDialog)/AFX_MSG_MAP(CFiletranDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTONCONNECT,OnButtonconnect)ON_BN_CLICKED(IDC_BUTTON_DISCONNECT,OnButtonDisconnect)ON_BN_CLICKED(IDC_BUTTON_SEND
32、_FILE,OnButtonSendFile)ON_BN_CLICKED(IDC_BUTTON_STOP,OnButtonStop)ON_BN_CLICKED(IDC_BUTTON_SENDMSG,OnButtonSendmsg)/AFX_MSG_MAPEND_MESSAGE_MAP()BOOLCFiletranDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX&0xFFF0)=IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemM
33、enu(FALSE);if(pSysMenu!=NULL)CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);SetIcon(m_hIcon,TRUE);/SetbigiconSetIcon(m_hIcon,FALSE);/SetsmalliconCStringstrLocalName
34、;GetLocalHostName(strLocalName);CStringstrLocalIP;GetIpAddress(strLocalName,strLocalIP);m_MyIp.SetWindowText(strLocalIP);得到本地的ipCStringtext="MyProgramTCP方式;SetWindowText(text);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);/斷開不可用GetDlgItem(IDC_BUTTONCONNECT)->EnableWindow(true);/連
35、接可用GetDlgItem(IDC_BUTTON_SEND_FILE)->EnableWindow(false);GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);GetDlgItem(IDC_BUTTON_SENDMSG)->EnableWindow(false);returnTRUE;/returnTRUEunlessyousetthefocustoacontrolvoidCFiletranDlg:OnSysCommand(UINTnID,LPARAMlParam)if(nID&0xFFF0)=IDM_ABOUTBO
36、X)CAboutDlgdlgAbout;dlgAbout.DoModal();)else(CDialog:OnSysCommand(nID,lParam);)voidCFiletranDlg:OnPaint()(if(IsIconic()(CPaintDCdc(this);/devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);intcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRect
37、rect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cylcon+1)/2;dc.DrawIcon(x,y,m_hlcon);).else(CDialog:OnPaint();)HCURSORCFiletranDlg:OnQueryDragIcon()(return(HCURSOR)m_hIcon;).UINT_ListenTcpThread(LPVOIDlparam)(.CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopS
38、erver=true)return-1;CSocketsockSrvr;pDlg->m_Potr=PORT;/保存當(dāng)前使用端口,用于關(guān)閉intcreateSucceed=sockSrvr.Create(pDlg->m_Potr);if(createSucceed=0)(AfxMessageBox("_ListenTcpThreadCreate錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;)intlistenSucceed=sockSrvr.Listen();開始監(jiān)聽if(listenSucceed=0)AfxMes
39、sageBox("_ListenTcpThreadListen錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;)CSocketrecSo;SOCKADDR_INclient;intiAddrSize=sizeof(client);intacceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR*)&client,&iAddrSize);if(acceptSucceed=0)AfxMessageBox("_ListenTcpThreadAccept錯(cuò)誤!"+pDl
40、g->GetError(GetLastError();return-1;)sockSrvr.Close();/厭閉charflagFLAG=0;if(recSo.Receive(flag,FLAG)!=2)return-1;pDlg->m_type=flag0;if(pDlg->m_type='D')return0;pThreadListen=:AfxBeginThread(_ListenTcpThread,pDlg);pDlg->ReceiveFileMsg(recSo,client);return0;UINT_SendFileThread(LPVOI
41、Dlparam)CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip;pDlg->m_YourIp.GetWindowText(ip);sockClient.Connect(ip,PORT);/首先發(fā)送標(biāo)記F為文件,2intend=0;end=sockClient.Send("F",FLAG);/發(fā)送標(biāo)志是否成功if(end=SOCKET_ERROR)(AfxMessageB
42、ox("_SendFileThreadSend錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;elseif(end!=2)(AfxMessageBox("文件頭錯(cuò)誤");return-1;CFilemyFile;FILEINFOmyFileInfo;if(!myFile.Open(pDlg->m_fileName,CFile二modeRead|CFile二typeBinary)return-1;myFileInfo.fileLength=myFile.GetLength();/得到文件大小strcpy(
43、myFileInfo.fileName,myFile.GetFileName();/得到文件名稱sockClient.Send(&myFileInfo,sizeof(myFileInfo);發(fā)送文件信息pDlg->m_Progress.SetRange32(0,myFileInfo.fileLength);myFile.Seek(0,CFile:begin);charm_bufSIZEFILE=0;CStringstrError;intnum=0;end=0;inttemp=0;for(;)if(pDlg->FileWork=false)pDlg->FileWork=
44、true;pDlg->GetDlgItem(IDCANCEL)->EnableWindow(false);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);num=myFile.Read(m_buf,SIZEFILE);if(num=0)break;end=sockClient.Send(m_buf,num);temp+=end;pDlg->m_Progress.SetPos(temp);if(pDlg->FileStop=true)pDlg->FileStop=false;pDl
45、g->FileWork=false;break;)if(end=SOCKET_ERROR)(AfxMessageBox("_SendFileThreadSend錯(cuò)誤!"+pDlg->GetError(GetLastError();break;)pDlg->m_Progress.SetPos(0);CStringstrLocalName;pDlg->GetLocalHostName(strLocalName);CStringstrLocalIP;pDlg->GetIpAddress(strLocalName,strLocalIP);if(temp
46、=myFileInfo.fileLength)AfxMessageBox("文件發(fā)送成功");elseAfxMessageBox("文件發(fā)送失敗");myFile.Close();sockClient.Close();pDlg->FileWork=false;pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);pDlg->GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);pDlg->GetDlgIte
47、m(IDCANCEL)->EnableWindow(true);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return0;)UINT_SendMsgThread(LPVOIDlparam)/TCP發(fā)送信息線程(CFiletranDlg*pDlg=(CFiletranDlg*)lparam;if(pDlg->StopServer=true)return-1;CSocketsockClient;sockClient.Create();CStringip,strError;pDlg->m_Yo
48、urIp.GetWindowText(ip);intconn=sockClient.Connect(ip,PORT);if(conn=0)/(AfxMessageBox("_SendMsgThreadConnect錯(cuò)誤!"+pDlg->GetError(GetLastError();sockClient.ShutDown(2);sockClient.Close();AfxEndThread(1L);return0;)/首先發(fā)送標(biāo)記M為信息,2intend=0;end=sockClient.Send("M",FLAG);if(end=SOCKET_E
49、RROR)AfxMessageBox("_SendMsgThreadSend錯(cuò)誤!"+pDlg->GetError(GetLastError();return-1;)elseif(end!=2)AfxMessageBox("消息頭錯(cuò)誤");return-1;)CStringstrMsg=pDlg->message;end=sockClient.Send(strMsg,strMsg.GetLength();if(end=SOCKET_ERROR)AfxMessageBox("_SendMsgThreadSend錯(cuò)誤!"+pD
50、lg->GetError(GetLastError();return-1;)inti=0;sockClient.Close();return0;)intCFiletranDlg:GetLocalHostName(CString&sHostName)charszHostName256;intnRetCode;nRetCode=gethostname(szHostName,sizeof(szHostName);if(nRetCode!=0)sHostName=_T('沒有取得!");returnGetLastError();)sHostName=szHostName;return0;)intCFiletranDlg:GetIpAddress(constCString&sHostName,CString&sIpAddress)HOSTENT*pHe;pHe=gethostbyname(sHostName);structin_addrinAddr;inAddr.s_addr=*(unsignedlong*)pHe->h_addr_list0);sIpAddress=inet_ntoa(inAddr);if(sIpAddress.IsEmpty()sIpAddress=_T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 修建贊助合同范本
- 勞務(wù)時(shí)間合同范本
- 內(nèi)外架合同范例
- 化肥合作合同范例
- 專項(xiàng)經(jīng)理聘用合同范本
- 農(nóng)業(yè)購貨合同范本
- 化工產(chǎn)品購銷服務(wù)合同范本
- 醫(yī)院購銷合同范本
- 出口布料銷售合同范例
- 養(yǎng)殖水車出租合同范例
- 發(fā)展?jié)h語初級綜合1:第30課PPT課件[通用]
- 馬工程西方經(jīng)濟(jì)學(xué)(第二版)教學(xué)課件-(4)
- 醫(yī)療廢物管理組織機(jī)構(gòu)架構(gòu)圖
- cjj/t135-2009《透水水泥混凝土路面技術(shù)規(guī)程》
- 短時(shí)耐受電流
- 社保人事專員績效考核表
- 杭州育才小升初數(shù)學(xué)試卷(共4頁)
- 河南書法家協(xié)會入會申請表
- 鄉(xiāng)村獸醫(yī)登記申請表(共1頁)
- 旋挖樁主要施工方法及技術(shù)措施(全護(hù)筒)
- GB∕T 12810-2021 實(shí)驗(yàn)室玻璃儀器 玻璃量器的容量校準(zhǔn)和使用方法
評論
0/150
提交評論