青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

asm, c, c++ are my all
-- Core In Computer
posts - 139,  comments - 123,  trackbacks - 0

MFC socket程序開發

Socket編程在大多數的編程語言中都是一件比較有趣的事情。它是比較常用的編寫通過網絡通信的服務器和客戶端方法。在windows平臺Socket通信大多是基于MS Winsock設計的。Windows支持基于TCP和UDP的socket通信。Windows APIs在socket編程中是非常有用的,但是有些人發現在用它們工作的時候有困難。
所以在這里我介紹一種最簡單用MFC socket類進行socket編程的方法。這不僅可以使你的工作變得簡單而且能減少你在網絡程序上的開發時間。你可以定制一個socket類,然后你可以在你的其他的網絡應用程序中重用。
在socket編程中,MFC提供了兩個基本的類,分別是CAsyncSocket和Csocket。Csocket是從CAsyncSocket繼承來的。我們可以建立定制的socket類,也是從CasyncSocket繼承而來的,當然也是為了我們程序特殊的需要。
初始化socket
首先需要調用AfxSocketInit()函數來初始化我們的socket環境。
為了初始化sockets,我們需要調用AfxSocketInit()函數。它通常是在MFC中的InitInstance()函數中被調用的。如果我們用程序向導來創建socket程序的話,查看“use Windows Sockets”這個選項,然后選中它。它將會自動的為我們創建這個步驟了。(如果我們沒有選中這個選項的話,我們也可以手動添加這些代碼的。)這個函數的返回值顯示這個函數的調用成功或失敗。
BOOL CServerApp::InitInstance()
{....
if( AfxSocketInit() == FALSE)
? {
? AfxMessageBox("Sockets Could Not Be Initialized");
? return FALSE;
? }
? ...
}
創建Server Sockets
為了創建一個Server Socket,我們需要聲明一個CAyncSocket的變量或者我們自己定制的一個從AyncSocket或是Cscket繼承來的類的類型的變量。然后調用Create()函數,同時指定監聽的端口。這個函數的返回值顯示這個函數的調用成功或失敗。
UpdateData(TRUE);
m_sListener.Create(m_port);
if(m_sListener.Listen()==FALSE)
{
AfxMessageBox("Unable to Listen on that port,please try another port");
m_sListener.Close();
return;
}
創建Client Sockets
為了創建Client socket類,我們需要聲明一個CAyncSocket的變量或者我們自己定制的一個從AyncSocket或是Cscket繼承來的類的類型的變量。然后調用Create()函數,同時指定監聽的端口。這個函數的返回值顯示這個函數的調用成功或失敗。
m_sConnected.Create();
m_sConnected.Connect("server ip",port);
監聽客戶端的連接
創建了server socket以后,我們要進行監聽。調用Listen()函數。這個函數的返回值顯示這個函數的調用成功或失敗。
if( m_sListener.Listen()== FALSE)
{
AfxMessageBox("Unable to Listen on that port,please try another port");
m_sListener.Close();
return;
}
接受連接
連接請求要被接受accept,是用另外的socket,不是正在監聽的socket。請參看代碼。
void CXXXDlg::OnAccept()
{
?CString strIP;
?UINT port;
?if(m_sListener.Accept(m_sConnected))
?{
? m_sConnected.GetSockName(strIP,port); //應該是GetPeerName,獲取對方的IP和port
? m_status="Client Connected,IP :"+ strIP;
? m_sConnected.Send("Connected To Server",strlen("Connected To? Server"));?????
UpdateData(FALSE);
?}
?else
?{
?AfxMessageBox("Cannoot Accept Connection");
?}
}
發送數據
數據放在一個buffer中或是結構體中,調用send()函數發送。
m_sConnected.Send(pBuf,iLen);
接受數據
調用receive()接受數據。
void CXXXrDlg::OnReceive()
{
char *pBuf =new char [1025];
CString strData;
int iLen;
iLen=m_sConnected.Receive(pBuf,1024);???
if(iLen == SOCKET_ERROR)?????
? {
? AfxMessageBox("Could not Recieve");?????
? }?????
else????
? {
? pBuf[iLen]=NULL;
? strData=pBuf;
? m_recieveddata.Insert(m_recieveddata.GetLength(),strData);
?//display in server?????????????
?UpdateData(FALSE);
?m_sConnected.Send(pBuf,iLen);? //send the data back to the Client????
?delete pBuf;?????????
? }
}
關閉連接
m_sConnected.ShutDown(0);??? 停止發送數據
m_sConnected.ShutDown(1);??? 停止接受數據
m_sConnected.ShutDown(2);??? 停止發送接受數據
m_sConnected.Close();
編寫自己的socket類
在class view中選擇添加一個新類,設置它的基類為CAsyncSocket,在類向導的幫助下添加如下的一些函數。
class MySocket : public CAsyncSocket
{ // Attributes
public:
?// Operations
public:
MySocket();
virtual ~MySocket();
// Overrides
public:
void SetParentDlg(CDialog *pDlg);// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(MySocket)
public:
virtual void OnAccept(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnConnect(int nErrorCode);
virtual void OnOutOfBandData(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
//}}AFX_VIRTUAL // Generated message map functions
//{{AFX_MSG(MySocket)
// NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG
protected:
private:
CDialog * m_pDlg;
};
設置“Parent Dialog”
調用這個socket類的SetParentDlg函數,保證當socket事件發生的時候這個窗體能接收到。
m_sListener.SetParentDlg(this);
m_sConnected.SetParentDlg(this);
建立Socket 事件和窗體成員函數之間的聯系
在這個窗體類中添加一些函數,比如void OnReceive(); void OnClose(); void OnAccept(); void OnConnect()等,它們會在我們編寫的的socket類中調用到。
void MySocket::OnAccept(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(nErrorCode==0)
{
((CServerDlg*)m_pDlg)->OnAccept();
}
CAsyncSocket::OnAccept(nErrorCode);
}
這里只寫了一個OnAccept()函數,其他的幾個中也有類似的調用。詳細的請參考代碼。

posted on 2006-07-28 01:07 Jerry Cat 閱讀(814) 評論(0)  編輯 收藏 引用

<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用鏈接

留言簿(7)

隨筆檔案

最新隨筆

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人成人99网站| 亚洲国产精品电影| 午夜一区不卡| aⅴ色国产欧美| 国产精品porn| 亚洲一区二区三区中文字幕| 在线视频亚洲一区| 欧美亚洲免费电影| 狼狼综合久久久久综合网| 免费看av成人| 欧美日韩国产一区精品一区 | 性高湖久久久久久久久| 香蕉免费一区二区三区在线观看| 欧美在线视频观看| 欧美福利小视频| 国产精品护士白丝一区av| 国产在线视频欧美| 99视频日韩| 欧美自拍丝袜亚洲| 亚洲三级网站| 先锋影音国产一区| 欧美大片免费观看在线观看网站推荐| 欧美日韩亚洲一区二| 国产专区综合网| 亚洲最新在线视频| 另类成人小视频在线| 亚洲精品欧美日韩| 久久视频这里只有精品| 国产精品免费在线| 亚洲精品一区二区三区av| 久久精品女人| 亚洲午夜激情| 欧美精品自拍| 亚洲国产精品va在看黑人| 欧美一乱一性一交一视频| 亚洲片在线观看| 老巨人导航500精品| 国产日韩成人精品| 亚洲性感激情| 亚洲精品乱码视频| 麻豆av一区二区三区久久| 国产亚洲成av人片在线观看桃| 亚洲一区二区在线免费观看视频| 欧美激情一区二区三区| 欧美在线91| 国产欧美一区二区在线观看| 亚洲私人影院在线观看| 亚洲激情专区| 欧美激情1区2区3区| 亚洲国产一区在线| 欧美成人免费网站| 久久深夜福利| 亚洲国产美国国产综合一区二区| 久久天堂成人| 久久精品国产久精国产爱| 国产午夜精品在线| 久久久久久久久岛国免费| 羞羞色国产精品| 国产欧美一区二区三区在线老狼| 欧美一区二区高清在线观看| 亚洲一区视频在线| 亚洲级视频在线观看免费1级| 久久综合狠狠综合久久综合88| 亚洲一区久久| 国产欧美日韩综合精品二区| 香蕉久久国产| 午夜精品www| 国产亚洲精品久久久| 久久一区二区三区四区五区| 久久久999成人| **性色生活片久久毛片| 欧美成人中文字幕| 欧美电影免费观看高清| 一区二区三区国产精品| 一二三区精品福利视频| 国产精品乱看| 久久女同精品一区二区| 麻豆精品网站| 在线视频欧美精品| 亚洲女同精品视频| 在线看日韩av| 99综合视频| 国内自拍视频一区二区三区| 免费观看亚洲视频大全| 欧美乱妇高清无乱码| 午夜伦欧美伦电影理论片| 欧美在线free| 99国产一区| 羞羞色国产精品| 亚洲免费观看高清在线观看 | 欧美国产成人在线| 欧美日韩另类视频| 久久精品亚洲精品国产欧美kt∨| 久久综合福利| 亚洲一区在线直播| 乱码第一页成人| 亚洲欧美精品伊人久久| 久久精品一二三区| 亚洲一区久久久| 久久亚洲综合| 香蕉国产精品偷在线观看不卡 | 欧美成人久久| 久久国产99| 欧美视频三区在线播放| 免费日韩av片| 国产欧美一区二区精品性 | 久久全球大尺度高清视频| 欧美激情亚洲国产| 久久夜色精品一区| 国产精品一区二区三区久久| 亚洲经典视频在线观看| 狠狠色狠狠色综合| 亚洲欧美日本视频在线观看| 一区二区三区久久网| 久久综合网hezyo| 久久久精品免费视频| 国产精品vvv| 亚洲精品国偷自产在线99热| 尤物yw午夜国产精品视频| 亚洲影音先锋| 国产日产欧美一区| 亚洲欧美欧美一区二区三区| 在线国产日韩| 欧美一级理论片| 亚洲欧美电影院| 欧美日本在线一区| 亚洲第一搞黄网站| 精品福利av| 欧美在线视频一区| 欧美一区三区二区在线观看| 国产精品成人v| 一区二区高清| 亚洲资源av| 国产精品久久久久久久浪潮网站| aⅴ色国产欧美| 亚洲主播在线| 国产欧美一区二区三区在线老狼| 亚洲中字黄色| 欧美在线日韩在线| 国产一区二区按摩在线观看| 欧美一区2区三区4区公司二百 | 尤物九九久久国产精品的分类| 久久精品女人天堂| 欧美大片在线观看| 亚洲福利视频网站| 欧美成人dvd在线视频| 亚洲精品久久久久久下一站| 99精品热视频| 国产精品一区二区久激情瑜伽| 亚洲一区二区三区视频| 久久精品视频在线观看| 在线成人av| 欧美精品日韩一本| 中文在线不卡视频| 久久全球大尺度高清视频| 亚洲高清免费| 欧美日韩一区二区视频在线| 亚洲欧美日韩国产| 欧美大香线蕉线伊人久久国产精品| 亚洲黄色天堂| 国产精品国产精品国产专区不蜜| 午夜日韩激情| 亚洲国产成人高清精品| 亚洲影视在线| 在线看日韩av| 国产精品mm| 看片网站欧美日韩| 一区二区三区色| 欧美成年人视频网站| 一区二区三区国产精华| 国产在线欧美日韩| 欧美日韩国产小视频| 欧美一区三区二区在线观看| 亚洲国内精品在线| 久久久xxx| 在线综合+亚洲+欧美中文字幕| 国产一区二区视频在线观看| 欧美成人官网二区| 欧美一区二区三区视频| 99国产精品视频免费观看一公开| 久久久久国产精品一区二区| 一区二区三区你懂的| 悠悠资源网久久精品| 国产精品乱看| 欧美欧美天天天天操| 久久久噜噜噜久久| 性欧美办公室18xxxxhd| 日韩视频精品在线观看| 欧美国产精品| 久久琪琪电影院| 国产伪娘ts一区| 国产精品成人aaaaa网站| 免费成人毛片| 久久久久久黄| 亚欧成人在线| 亚洲欧美在线x视频| 制服诱惑一区二区| 一级成人国产| 一区二区免费在线播放| 99ri日韩精品视频|