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

doing5552

記錄每日點(diǎn)滴,不枉人生一世

  C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  73 Posts :: 0 Stories :: 94 Comments :: 0 Trackbacks

公告

常用鏈接

留言簿(24)

我參與的團(tuán)隊(duì)

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 456264
  • 排名 - 49

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

CSocket派生于CAsyncSocket, 所有施諸于上的操作皆為同步操作。比如Connnect,Receive等。
同步操作的優(yōu)點(diǎn)是簡(jiǎn)單易用,但缺點(diǎn)也顯而易見(jiàn),效率低下,因?yàn)槟惚仨毜鹊揭粋€(gè)操作完成之后才能進(jìn)行下一個(gè)操作。
如果你很關(guān)心效率,就應(yīng)該優(yōu)先使用CAsyncSocket。反之就用CSocket。
下面將說(shuō)明如何用CSocket創(chuàng)建簡(jiǎn)單的服務(wù)器和客戶端。

[創(chuàng)建服務(wù)器]

服務(wù)器的運(yùn)作有5個(gè)階段:
1. 創(chuàng)建服務(wù)器Socket并開(kāi)啟監(jiān)聽(tīng)。
2. 獲取新的客戶端連接Socket,將之加入客戶端Socket列表以管理之。
3. 客戶端Socket讀取數(shù)據(jù)并發(fā)送數(shù)據(jù)。
4. 客戶端連接被動(dòng)關(guān)閉,從列表刪除。
5. 程序關(guān)閉,進(jìn)而服務(wù)器連接主動(dòng)關(guān)閉。

為了維持5階段的運(yùn)作,需要兩種Socket協(xié)同工作, 第一種用作服務(wù)器監(jiān)聽(tīng)(負(fù)責(zé)步驟1,2,5),第二種用作客戶端管理(負(fù)責(zé)步驟3,4)。
兩種Socket皆派生自CSocket, 通過(guò)重寫(xiě)不同的CSocket成員函數(shù)以實(shí)現(xiàn)不同的功能。

前者需要在服務(wù)器初始化階段創(chuàng)建出來(lái)CSocket::Create()并開(kāi)啟監(jiān)聽(tīng)CSocket::Listen()(步驟1)。并在服務(wù)器退出時(shí)主動(dòng)關(guān)閉連接CSocket::Close()(步驟5)。
前者還需要重寫(xiě)OnAccept以在新的客戶端連接到來(lái)時(shí)被通知,同時(shí)產(chǎn)生客戶端管理Socket(步驟2)。

 

后者需要重寫(xiě)OnReceive以在有數(shù)據(jù)到來(lái)時(shí)被通知,或重寫(xiě)OnClose以在連接被動(dòng)關(guān)閉(客戶端關(guān)閉)時(shí)被通知(步驟3,4)。

讀寫(xiě)數(shù)據(jù)需要CSocketFile以及CArchieve的支持。前者將CSocket當(dāng)作一個(gè)文件,后者則完成在此文件上的讀寫(xiě)操作。
通常你需要添加一個(gè)CSocketFile成員,兩個(gè)CArchieve成員(一個(gè)用于讀,一個(gè)用于寫(xiě)),然后在Socket創(chuàng)建完成后初始化這些成員

socketFile_ = new CSocketFile( this ); // 在archive創(chuàng)建出來(lái)后基本上就不需要操作他了,直到Socket關(guān)閉
archiveIn_ = new CArchive( socketFile_, CArchive::load ); // 用于讀
archiveOut_ = new CArchive( socketFile_, CArchive::store ); // 用于取

并在OnRecevie中用archiveIn_讀取數(shù)據(jù),用archiveOut_寫(xiě)入數(shù)據(jù)。像這樣:
int value;
archiveIn_ >> value;
archiveOut_ << value * value;

下面是比較完整的Server端的源代碼:

//---------------------------------------------------------------------------------
// CServerDoc.cpp
//---------------------------------------------------------------------------------
BOOL CServerDoc::OnNewDocument()
{
    ...
    serverSocket_ = new CServerSocket( this );
    serverSocket_->Create( 5001 );
    serverSocket_->Listen( 5 );
    return TRUE;
}

void CServerDoc::DeleteContents()
{
    // TODO: Add your specialized code here and/or call the base class
    delete serverSocket_;
    serverSocket_ = NULL;

    // 主動(dòng)斷開(kāi)連接
    // release all client sockets
    POSITION position = clientSockets_.GetHeadPosition();
    while ( position != NULL ) {
        delete clientSockets_.GetNext( position );
    }
    clientSockets_.RemoveAll();

    CDocument::DeleteContents();
}

void CServerDoc::OnAccept()
{
    CClientSocket* newClientSocket = new CClientSocket( this );
    serverSocket_->Accept( *newClientSocket );
    newClientSocket->Initialize();
    clientSockets_.AddTail( newClientSocket );
}

// 被動(dòng)斷開(kāi)連接
void CServerDoc::OnClose( CClientSocket* clientSocket )
{   
    POSITION position = clientSockets_.Find( clientSocket );   
    clientSockets_.RemoveAt( position );
    delete clientSocket;
}

void CServerDoc::OnReceive( CClientSocket* clientSocket )
{
    // receive data with clientSocket  
}

//---------------------------------------------------------------------------------
// CServerSocket.cpp
//---------------------------------------------------------------------------------
CServerSocket::CServerSocket( CServerDoc* document )
: document_( document )
{
}

CServerSocket::~CServerSocket()
{
}

void CServerSocket::OnAccept(int nErrorCode)
{
    // TODO: Add your specialized code here and/or call the base class
    document_->OnAccept();
    CSocket::OnAccept(nErrorCode);
}

//---------------------------------------------------------------------------------
// CClientSocket.cpp
//---------------------------------------------------------------------------------
CClientSocket::CClientSocket( CServerDoc* document )
: document_( document )
, socketFile_( NULL )
, archiveIn_( NULL )
, archiveOut_( NULL )
{
}

CClientSocket::~CClientSocket()
{
    delete archiveIn_;
    archiveIn_ = NULL;

    delete archiveOut_;
    archiveOut_ = NULL;
   
    // 必須在刪除archive以后刪除
    delete socketFile_;
    socketFile_ = NULL;   
}

void CClientSocket::OnClose(int nErrorCode)
{
    // TODO: Add your specialized code here and/or call the base class   
    CSocket::OnClose(nErrorCode);
    document_->OnClose( this ); // 一定要在最后一行
}

void CClientSocket::OnReceive(int nErrorCode)
{
    // TODO: Add your specialized code here and/or call the base class
    document_->OnReceive( this );
    CSocket::OnReceive(nErrorCode);
}

BOOL CClientSocket::Initialize()
{
    socketFile_ = new CSocketFile( this );
    archiveIn_ = new CArchive( socketFile_, CArchive::load );
    archiveOut_ = new CArchive( socketFile_, CArchive::store );
    return TRUE;
}

[創(chuàng)建客戶端]

客戶端的運(yùn)作比服務(wù)器簡(jiǎn)單
1. 創(chuàng)建客戶端Socket并連接到服務(wù)器。 CSocket::Create() -> CSocket::Connect()
2. 客戶端Socket讀取數(shù)據(jù)并發(fā)送數(shù)據(jù)。   CSocket::OnReceive()
3. 客戶端連接被動(dòng)關(guān)閉。                        CSocket::OnClose()
4. 程序關(guān)閉,進(jìn)而客戶端連接主動(dòng)關(guān)閉。CSocket::Close()

下面是比較完整的Client端的源代碼:

//---------------------------------------------------------------------------------
// CClientDlg.cpp
//---------------------------------------------------------------------------------
CClientDlg::CClientDlg(CWnd* pParent /*=NULL*/)
: CDialog(CClientDlg::IDD, pParent)
    , socket_( NULL )   
{
    ...
}

void CClientDlg::OnDestroy()
{
    CDialog::OnDestroy();

    // TODO: Add your message handler code here
    // 主動(dòng)斷開(kāi)連接
    delete socket_;
    socket_ = NULL;
}

void CClientDlg::OnBnClickedConnnect()
{
    // TODO: Add your control notification handler code here
    UpdateData( TRUE );

    socket_ = new CClientSocket( this );
    socket_->Create();

    if ( !socket_->Connect( "127.0.0.1", 5001 ) ) {
        delete socket_;
        socket_ = NULL;
        MessageBox( _T( "連接失敗" ) );
        return;
    }
    socket_->Initialize();
}

// 主動(dòng)斷開(kāi)連接
void CClientDlg::OnBnClickedDisconnect()
{
    // TODO: Add your control notification handler code here
    delete socket_;
    socket_ = NULL;
}

// 被動(dòng)斷開(kāi)連接
void CClientDlg::OnClose()
{
    delete socket_;
    socket_ = NULL;
    MessageBox( _T("服務(wù)器斷開(kāi)") );   
}

void CClientDlg::OnReceive()
{
    // receive data with socket_
}

//---------------------------------------------------------------------------------
// CClientSocket.cpp
//---------------------------------------------------------------------------------
CClientSocket::CClientSocket( CClientDlg* dialog )
: dialog_( dialog )
, socketFile_( NULL )
, archiveIn_( NULL )
, archiveOut_( NULL )
{
}

CClientSocket::~CClientSocket()
{
    delete archiveIn_;
    archiveIn_ = NULL;
    delete archiveOut_;
    archiveOut_ = NULL;
    delete socketFile_;
    socketFile_ = NULL;
}

void CClientSocket::OnClose(int nErrorCode)
{
    // TODO: Add your specialized code here and/or call the base class   
    CSocket::OnClose(nErrorCode);
    dialog_->OnClose();
}

void CClientSocket::OnReceive(int nErrorCode)
{
    // TODO: Add your specialized code here and/or call the base class
    dialog_->OnReceive();
    CSocket::OnReceive(nErrorCode);
}

BOOL CClientSocket::Initialize()
{
    socketFile_ = new CSocketFile( this );
    archiveIn_ = new CArchive( socketFile_, CArchive::load );
    archiveOut_ = new CArchive( socketFile_, CArchive::store );
    return TRUE;
}

posted on 2010-01-12 20:47 doing5552 閱讀(484) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美高清在线视频观看不卡| 激情综合久久| 日韩视频三区| 欧美国产日本| 欧美日韩国产成人在线91| 亚洲视频一区二区免费在线观看| 亚洲日本乱码在线观看| 欧美日韩免费高清一区色橹橹| 在线亚洲一区| 亚洲欧美区自拍先锋| 激情综合网址| 亚洲精品久久久久中文字幕欢迎你| 欧美另类videos死尸| 午夜天堂精品久久久久 | 亚洲精品视频在线| 亚洲精品一区二区三区四区高清| 欧美日韩一区二区三区四区五区| 亚洲欧美影院| 久热精品视频| 亚洲一区二区在线视频| 欧美夜福利tv在线| 亚洲欧洲一区二区在线播放| 一区二区三区产品免费精品久久75| 国产精品系列在线播放| 欧美大片一区二区| 国产精品久久久久久福利一牛影视| 久久亚洲视频| 国产精品乱码| 亚洲承认在线| 国产日本精品| 一本久久精品一区二区| 好看不卡的中文字幕| 一本色道久久综合狠狠躁篇怎么玩 | 国产精品九九| 美女性感视频久久久| 国产精品videosex极品| 欧美激情精品久久久久久大尺度 | 久久亚洲春色中文字幕| 亚洲女同精品视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久久国产精品一区二区三区| 一区二区激情| 蜜桃av综合| 久久久美女艺术照精彩视频福利播放| 欧美精品亚洲精品| 久久久综合网站| 国产精品爽爽ⅴa在线观看| 亚洲国产精品999| 红桃视频国产精品| 午夜精品成人在线| 亚洲视频在线观看免费| 六十路精品视频| 久久综合久久美利坚合众国| 国产精品尤物| 亚洲在线视频| 亚洲欧美国产日韩天堂区| 欧美日韩中国免费专区在线看| 亚洲韩日在线| 亚洲免费精彩视频| 欧美精品九九99久久| 亚洲国产乱码最新视频| 亚洲第一页中文字幕| 久久精品成人一区二区三区蜜臀| 欧美一区成人| 国产精品一区二区你懂得| 亚洲一级影院| 欧美一区二区福利在线| 国产精品扒开腿做爽爽爽视频 | 亚洲精品1区2区| 亚洲人成在线免费观看| 欧美国产亚洲另类动漫| 亚洲精品影院| 亚洲视频免费在线| 国产精品亚洲综合天堂夜夜| 亚洲一区二区三区777| 午夜精品久久久久久久99水蜜桃| 国产精品激情电影| 欧美一区深夜视频| 久热精品视频在线免费观看 | 国产精品一区二区你懂得| 亚洲视频网在线直播| 欧美在线观看视频一区二区| 狠狠综合久久av一区二区小说| 久久久www| 91久久精品日日躁夜夜躁欧美| 一区二区欧美日韩视频| 国产精品免费小视频| 欧美一区二区视频97| 美女999久久久精品视频| 亚洲人体1000| 国产精品一区二区三区四区五区| 久久久.com| 亚洲人成网站精品片在线观看| 亚洲一区二区在| 一区二区三区在线观看欧美| 牛人盗摄一区二区三区视频| 亚洲免费av电影| 久久久久久久网站| 99精品国产一区二区青青牛奶| 欧美视频在线观看 亚洲欧| 欧美一区观看| 亚洲欧洲免费视频| 久久久美女艺术照精彩视频福利播放| 91久久国产综合久久| 国产精品一区免费观看| 你懂的亚洲视频| 午夜在线播放视频欧美| 亚洲欧洲日产国码二区| 欧美一区亚洲二区| 夜夜嗨av一区二区三区四区| 国产一区二区日韩精品欧美精品| 欧美黄色片免费观看| 久久都是精品| 一区二区欧美亚洲| 亚洲国产精品va在线观看黑人| 亚洲欧美视频在线| 亚洲毛片一区二区| 在线播放日韩专区| 国产精品视频xxxx| 欧美啪啪成人vr| 久久偷窥视频| 性欧美1819性猛交| 亚洲图片欧美一区| 亚洲日本免费电影| 亚洲福利视频专区| 久久综合狠狠综合久久激情| 性久久久久久| 亚洲一区二区视频| 99精品视频一区二区三区| 一区二区三区在线观看欧美| 国产亚洲激情视频在线| 国产精品海角社区在线观看| 欧美日韩精品是欧美日韩精品| 欧美v日韩v国产v| 久久久久久午夜| 久久精品国产亚洲一区二区| 午夜精品一区二区三区在线视| 日韩亚洲欧美在线观看| 日韩亚洲国产精品| 亚洲精品黄网在线观看| 亚洲国产欧美日韩| 欧美高清视频一区| 欧美高清在线精品一区| 欧美成人激情在线| 欧美暴力喷水在线| 欧美va天堂在线| 亚洲丁香婷深爱综合| 欧美大片一区| 亚洲激情在线| 日韩午夜精品视频| 在线一区二区三区做爰视频网站 | 亚洲免费观看在线视频| 亚洲精品国产精品国自产在线 | 久久久一二三| 免费观看日韩av| 欧美巨乳波霸| 国产精品乱人伦中文| 国产视频久久久久| 在线观看视频一区| 亚洲精品久久久蜜桃| 国产精品99久久久久久人| 亚洲制服少妇| 久久久无码精品亚洲日韩按摩| 免费成人性网站| 亚洲片在线资源| 一区二区三区精品国产| 欧美一区1区三区3区公司| 久久综合色一综合色88| 欧美日韩高清区| 国产人妖伪娘一区91| 1204国产成人精品视频| 一本久久综合亚洲鲁鲁| 久久国产精品99国产精| 亚洲二区精品| 亚洲免费视频一区二区| 久久综合色播五月| 国产精品久久久久毛片大屁完整版| 国产一区二区三区丝袜| 亚洲精品在线看| 久久精品国产第一区二区三区| 老色批av在线精品| 99精品热视频| 久久久久久久性| 国产精品久久国产精品99gif| 国产一区二区三区免费观看| 日韩视频免费观看高清完整版| 欧美一区二区免费视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲精选中文字幕| 久久精品中文字幕一区| 欧美日韩亚洲高清一区二区| 在线观看日韩精品| 翔田千里一区二区| 亚洲精华国产欧美| 久久久久久免费| 国产精品亚洲а∨天堂免在线| 亚洲国产综合在线看不卡| 久久成人国产精品| 一区二区三区日韩| 欧美乱大交xxxxx|