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

Javen-Studio 咖啡小屋

http://javenstudio.org - C++ Java 分布式 搜索引擎
Naven's Research Laboratory - Thinking of Life, Imagination of Future

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  24 隨筆 :: 57 文章 :: 170 評論 :: 4 Trackbacks

SOCKET 的封裝

C++ 通用框架的設(shè)計 作者: naven

1?????????? SOCKET 封裝介紹

Socket 通訊程序估計現(xiàn)在大多數(shù)應(yīng)用系統(tǒng)都會涉及到,因為現(xiàn)在的世界是一個由 Internet 網(wǎng)絡(luò)連接的世界,任何個人電腦或服務(wù)都可能會有數(shù)據(jù)交換,通過 TCP/UDP 這樣的 Socket 通訊協(xié)議進(jìn)行聯(lián)系。開發(fā)這樣的通訊程序會是很普遍也很類似,每種操作系統(tǒng)都實現(xiàn)了 Socket 通訊庫并提供很相似的 API ,通訊步驟都遵循 RFC 規(guī)范。但是有些 API 的具體接口卻稍有不同,比如 Socket IO API win32 系統(tǒng)和 Unix 系統(tǒng)就不一樣, Win32 recv/send Unix 使用標(biāo)準(zhǔn)統(tǒng)一的 read/write ,而且 socket 句柄在不同操作系統(tǒng)處理也不一樣,等等這些都造成編寫跨平臺的 Socket 應(yīng)用不太容易。另外編寫服務(wù)器和客戶端的處理步驟也很繁瑣, IP 地址和域名的轉(zhuǎn)換也很麻煩,所以實現(xiàn)一個標(biāo)準(zhǔn)統(tǒng)一使用更簡潔的 API 非常有用。本 C++ 框架基本參考 Java Socket 相關(guān)類實現(xiàn)了類似封裝,除了 ServerSocket 實現(xiàn)稍有不同,其他原理和方法基本類似。用它編寫網(wǎng)絡(luò)應(yīng)用基本不用考慮底層的協(xié)議處理,使用非常容易,代碼也更簡潔易讀。

?

主要有如下一些類

?

class Socket ?????????????????????? ??????????????????????????? 代表一個 TCP 連接的 Socket 對象

???????? class DatagramSocket??????????????????????????????????? 代表一個 UDP 連接的 Socket 對象(暫未實現(xiàn))

???????? class MulticastSocket??????????????????????????????????? 一個 DatagramSocket 的子類用于多播(暫未實現(xiàn))

class SocketAcceptor??????????????????????????????????? 一個 TCP 服務(wù)端的接收器

class SocketConnector????????????????????????????????? 一個 TCP 客戶端的連接器

???????? class SocketInputStream?????????????????????????????? 一個 Socket 連接的輸入流

???????? class SocketOutputStream??????????????????????????? 一個 Socket 連接的輸出流

???????? class SocketReader??????????????????????????????????????? 一個 Socket 連接的讀操作器

???????? class SocketWriter????????????????????????????????????????? 一個 Socket 連接的寫操作器

?

Socket 的意思是在網(wǎng)絡(luò)的機(jī)器之間建立一個通信線路。通過 TCP Sockets 發(fā)送或接收的操作時通過 InputStream OutputStream 流處理的, Socket 類的 getInputStream getOutputStream 可以取得該 Socket 連接的輸入 / 輸出流對象。 SocketAcceptor 是用于服務(wù)器端的接收器,它處于接收的狀態(tài)時會阻塞,直到接收到客戶端的連接請求,這時就會創(chuàng)建一個 Socket 對象代表該服務(wù)器到此客戶端的連接。而對應(yīng)的 SocketConnector 是用于客戶端的連接器,它向服務(wù)端發(fā)出連接請求,如果服務(wù)器允許連接,則也同時建立一個 Socket 對象表示它到服務(wù)器端的連接,這時就可以獲取輸入 / 輸出流對象進(jìn)行 Socket 通訊了。

2?????????? Hello World!

下面的程序示例如何用上面的類進(jìn)行 Scoket 通訊:

這是服務(wù)端的實現(xiàn)

void ?servertest()?
{
????
// ?定義一個接收器綁定?8000?端口
????SocketAcceptor?sa( 8000 );?
????
while ( 1 )?
{
???????
// ?阻塞等待連接請求
????????Socket?sk? = ?sa.accept();?
????????
// ?獲取此連接的讀操作器和寫操作器
????????Reader? & rd? = ?sk.getReader();?
????????Writer?
& wr? = ?sk.getWriter();?
????????String?s;?
????????
// ?從客戶端讀取?10?個字節(jié)
????????rd.read(s,? 10 );?
????????
// ?向客戶端寫信息
????????wr.write(“read?ok”);?
????????
// ?關(guān)閉連接
????????sk.close();?
}

}

這是客戶端的實現(xiàn)

void ?clienttest()
{
????
// ?定義一個連接器
SocketConnector?sc;?
// ?連接指定的服務(wù)器地址及端口,?返回一個Socket對象
Socket?sk? = ?sc.connect(“l(fā)ocalhost”,? 8000 );?
// ?如果已成功連上
???? if (?sk.isConnected()?)?
{
????
// ?獲取此連接的讀操作器和寫操作器
????????Reader & ?reader? = ?sk.getReader();?
????????Writer
& ?writer? = ?sk.getWriter();?
????????
// ?可以在讀操作器上建立一個帶緩沖的讀操作器
????????BufferedReader?rd(reader);
????????
// ?向服務(wù)器發(fā)送信息
????????writer.write(“hello?server”);
????????
// ?接收信息,?帶緩沖的讀操作器可以讀取一行
????????rd.readLine(s);
????????
// ?關(guān)閉連接
????????sk.close();
????}

}


1?????????? Socket

此類定義一個表示 Socket 連接的類,一個 Socket 是一個為在兩臺機(jī)器間通信的端點。一個 Socket 類的真實行為是通過一個 SocketImpl 類的詩體執(zhí)行的。一個應(yīng)用程序可以通過改變 Socket Factory 來創(chuàng)建 Socket 的具體實現(xiàn),以適應(yīng)本地的局域網(wǎng)防火墻。

Socket 類成員和主要接口定義如下:

?

class ?Socket?:? public ?AbstractFile?
{
protected :?
????
/* *
?????*?The?implementation?of?this?Socket.
?????
*/

????SocketImplAutoPtr?_impl;?

????
/* *
?????*?Various?states?of?this?socket.
?????
*/

????BOOL?_connected;?
????BOOL?_closed;?
????BOOL?_shutIn;?
BOOL?_shutOut;

public :?
????
/* *
?????*?Creates?an?unconnected?socket,?with?the
?????*?system-default?type?of?SocketImpl.
?????
*/

Socket();

????
/* *
?????*?Returns?an?input?stream?for?this?socket.
?????*
?????*?@return?????an?input?stream?for?reading?bytes?from?this?socket.
?????
*/

????InputStream
& ?getInputStream();

????
/* *
?????*?Gets?an?Reader?for?this?socket.
?????
*/

????Reader
& ?getReader();

????
/* *
?????*?Returns?an?output?stream?for?this?socket.
?????*
?????*?@return?????an?output?stream?for?writing?bytes?to?this?socket.
?????
*/

????OutputStream
& ?getOutputStream();

????
/* *
?????*?Gets?an?Writer?for?this?socket.
?????
*/

????Writer
& ?getWriter();?

????
/* *
?????*?Enable/disable?the?option?specified?by?<I>optID</I>.??If?the?option
?????*?is?to?be?enabled,?and?it?takes?an?option-specific?"optval",??this?is
?????*?passed?in?<I>value</I>.??The?actual?type?of?value?is?option-specific,
?????*?and?it?is?an?error?to?pass?something?that?isn't?of?the?expected?type:
?????*?<BR>
?????*
?????*?@param?optID?identifies?the?option
?????*?@param?level?[in]?Level?at?which?the?option?is?defined;?the?supported?levels?
?????*??????????????include?SOL_SOCKET?and?IPPROTO_TCP.?
?????*?@param?optval?[in]?Pointer?to?the?buffer?in?which?the?value?for?the?requested?
?????*??????????????option?is?to?be?returned.
?????*?@param?optlen?[in]?Pointer?to?the?size?of?the?optval?buffer,?in?bytes.?
?????*?@return?0?If?no?error?occurs,?Otherwise,?a?value?of?SOCKET_ERROR(-1)?is?returned,?
?????*??????????and?a?specific?error?code?can?be?retrieved?by?socketerrno.
?????*?@see?#getOption(int)
?????
*/

????
int ?setOption( int ?optID,? int ?level,? const ? void ? * optval,? int ?optlen);

????
/* *
?????*?Fetch?the?value?of?an?option.
?????*?Binary?options?will?return?java.lang.Boolean(true)
?????*?if?enabled,?java.lang.Boolean(false)?if?disabled,?e.g.:
?????*?<BR>
?????*
?????*?@param?optID?an?<code>int</code>?identifying?the?option?to?fetch
?????*?@param?level?[in]?Level?at?which?the?option?is?defined;?the?supported?levels?
?????*??????????????include?SOL_SOCKET?and?IPPROTO_TCP.?
?????*?@param?optval?[out]?Pointer?to?the?buffer?in?which?the?value?for?the?requested?
?????*??????????????option?is?to?be?returned.
?????*?@param?optlen?[in,?out]?Pointer?to?the?size?of?the?optval?buffer,?in?bytes.?
?????*?@return?0?If?no?error?occurs,?Otherwise,?a?value?of?SOCKET_ERROR(-1)?is?returned,?
?????*??????????and?a?specific?error?code?can?be?retrieved?by?socketerrno.
?????*?@see?#setOption(int,?java.lang.Object)
?????
*/

????
int ?getOption( int ?optID,? int ?level,? void ? * optval,? int ? * optlen);

????
/* *
?????*?Closes?this?socket.
?????*?<p>
?????*?Any?thread?currently?blocked?in?an?I/O?operation?upon?this?socket
?????*?will?throw?a?{@link?SocketException}.
?????*?<p>
?????*?Once?a?socket?has?been?closed,?it?is?not?available?for?further?networking
?????*?use?(i.e.?can't?be?reconnected?or?rebound).?A?new?socket?needs?to?be
?????*?created.
?????*
?????*?<p>?If?this?socket?has?an?associated?channel?then?the?channel?is?closed
?????*?as?well.
?????*
?????
*/

????
void ?close();

}
;


?

1?????????? SocketAcceptor

此類實現(xiàn)一個用于服務(wù)器端接收連接的類。一個SocketAcceptor對象等待來自網(wǎng)絡(luò)的連接請求,它執(zhí)行一些基于請求的操作,并且可能返回一些信息給請求者。連接成功后SocketAcceptor會生成一個Socket對象用于網(wǎng)絡(luò)通訊。

SocketAcceptor類成員和主要接口定義如下:

?

class?SocketAcceptor
{
protected:?
????
/**
?????*?The?factory?for?all?server?sockets.
?????
*/

????
static?SocketImplFactoryAutoPtr?_factory;?

????
/**
?????*?The?implementation?of?this?Socket.
?????
*/

????SocketImplAutoPtr?_impl;?

????
/**
?????*?Various?states?of?this?socket.
?????
*/

????BOOL?_bound;?
????BOOL?_created;?
????BOOL?_closed;?
????BOOL?_stream;?

public:?
????
/**
?????*?Creates?a?socket?acceptor?with?default?stream?type.
?????*?<p>
?????
*/

????SocketAcceptor();?

????
/**
?????*?Creates?a?socket?acceptor?with?specified?stream?type,?
?????*?bound?to?the?specified?port?and?host.?A?port?of?
?????*?<code>0</code>?creates?a?socket?on?any?free?port.?
?????*?<p>
?????*?The?maximum?queue?length?for?incoming?connection?indications?(a?
?????*?request?to?connect)?is?set?to?<code>50</code>.?If?a?connection?
?????*?indication?arrives?when?the?queue?is?full,?the?connection?is?refused.
?????*?<p>
?????*?If?the?application?has?specified?a?server?socket?factory,?that?
?????*?factory's?<code>createSocketImpl</code>?method?is?called?to?create?
?????*?the?actual?socket?implementation.?Otherwise?a?"plain"?socket?is?created.
?????*?<p>
?????*
?????*?@param??????host?the?host?address?the?server?will?bind?to
?????*?@param??????port??the?port?number,?or?<code>0</code>?to?use?any
?????*???????????????????free?port.
?????*?@param??????stream????if?<code>true</code>,?create?a?stream?socket;
?????*???????????????????????otherwise,?create?a?datagram?socket.
?????*?@param??????backlog?the?listen?backlog
?????
*/

SocketAcceptor(
const?String?&host,?int?port,?BOOL?stream?=?TRUE);

????
/**
?????*?Binds?the?<code>ServerSocket</code>?to?a?local?address
?????*?(IP?address?and?port?number).
?????*?<P>
?????*?The?<code>backlog</code>?argument?must?be?a?positive
?????*?value?greater?than?0.?If?the?value?passed?if?equal?or?less
?????*?than?0,?then?the?default?value?will?be?assumed.
?????*?@param?port?the?local?TCP?port
?????*?@param?backlog?the?listen?backlog
?????*?@return?0?If?no?error?occurs,?Otherwise,?a?value?of?
?????*??????????SOCKET_ERROR(-1)?is?returned
?????
*/

????
int?bind(int?port,?int?backlog?=?LISTENQ);

????
/**
?????*?Listens?for?a?connection?to?be?made?to?this?socket?and?accepts?
?????*?it.?The?method?blocks?until?a?connection?is?made.?
?????*
?????*?<p>A?new?Socket?<code>s</code>?is?created?and,?if?there?
?????*?is?a?security?manager,?
?????*?the?security?manager's?<code>checkAccept</code>?method?is?called
?????*?with?<code>s.getInetAddress().getHostAddress()</code>?and
?????*?<code>s.getPort()</code>
?????*
?????*?@param?timeout??timeout?to?accept?in?ms.?
?????*?@return?the?new?Socket
?????
*/

????Socket?accept(
int?timeout);?

????
/**
?????*?Closes?this?socket?acceptor.
?????*?<p>
?????*?Any?thread?currently?blocked?in?an?I/O?operation?upon?this?socket
?????*?will?throw?a?{@link?SocketException}.
?????*?<p>
?????*?Once?a?socket?has?been?closed,?it?is?not?available?for?further?networking
?????*?use?(i.e.?can't?be?reconnected?or?rebound).?A?new?socket?needs?to?be
?????*?created.
?????*
?????*?<p>?If?this?socket?has?an?associated?channel?then?the?channel?is?closed
?????*?as?well.
?????*
?????
*/

????
void?close();

}
;

1?????????? SocketConnector

此類實現(xiàn)一個用于客戶器端連接服務(wù)的類。一個SocketConnector對象可以向指定的服務(wù)地址和端口發(fā)出的連接請求,它執(zhí)行一些基于請求的操作,并且可能返回一些信息。連接成功后SocketConnector會生成一個Socket對象用于網(wǎng)絡(luò)通訊。

SocketConnector類成員和主要接口定義如下:

class?SocketConnector
{
protected:?
????
/**
?????*?The?factory?for?all?server?sockets.
?????
*/

????
static?SocketImplFactoryAutoPtr?_factory;?

????
/**
?????*?The?implementation?of?this?Socket.
?????
*/

????SocketImplAutoPtr?_impl;?

????
/**
?????*?Various?states?of?this?socket.
?????
*/

????BOOL?_bound;?
????BOOL?_created;?
????BOOL?_closed;?
????BOOL?_stream;;?

public:?
????
/**
?????*?Creates?a?socket?connector?with?specified?stream?type.
?????*?default?is?Creates?a?stream?socket?connector.?
?????*?<p>
?????*
?????*?@param??????stream????if?<code>true</code>,?create?a?stream?socket;
?????*???????????????????????otherwise,?create?a?datagram?socket.
?????
*/

????SocketConnector(BOOL?stream?
=?TRUE);

????
/**
?????*?Creates?a?socket?and?connects?it?to?the?specified?port?on
?????*?the?specified?host.
?????*?@param?host?the?specified?host
?????*?@param?port?the?specified?port
?????*?@param?timeout?the?timeout?value?in?milliseconds,?or?zero?for?no?timeout.
?????*??????????-1?will?use?default?timeout.
?????*?@return?the?new?Socket
?????
*/

Socket?connect(
const?String?&host,?int?port,?int?timeout?=?-1);

????
/**
?????*?Closes?this?socket?connector.
?????*?<p>
?????*?Any?thread?currently?blocked?in?an?I/O?operation?upon?this?socket
?????*?will?throw?a?{@link?SocketException}.
?????*?<p>
?????*?Once?a?socket?has?been?closed,?it?is?not?available?for?further?networking
?????*?use?(i.e.?can't?be?reconnected?or?rebound).?A?new?socket?needs?to?be
?????*?created.
?????*
?????*?<p>?If?this?socket?has?an?associated?channel?then?the?channel?is?closed
?????*?as?well.
?????*
?????
*/

????
void?close();

}
;

1?????????? SocketInputStream

這個類類似與其他InputStreamFileInputStream類,是InputStream接口類的一個實現(xiàn),執(zhí)行Socket流的讀取操作,實現(xiàn)的接口均是最基礎(chǔ)的操作,如讀取一個byte字節(jié)的數(shù)據(jù),或者讀取指定長度的數(shù)據(jù)。

SocketInputStream類成員和主要接口定義如下:

class?SocketInputStream?:?public?InputStream
{
protected:?
????
/**
?????*?Pointer?to?the?implementation?of?this?SocketImpl.
?????
*/

????PlainSocketImpl?
*_impl;?

????
/**
?????*?Pointer?to?the?implementation?of?this?Socket.
?????
*/

????Socket?
*_socket;?

????BOOL?_eof;?
BOOL?_closing;

????
/**
?????*?Creates?a?new?SocketInputStream.?Can?only?be?called
?????*?by?a?Socket.?This?method?needs?to?hang?on?to?the?owner?Socket?so
?????*?that?the?fd?will?not?be?closed.
?????*?@param?impl?the?implemented?socket?input?stream
?????
*/

????SocketInputStream(PlainSocketImpl?
&impl);

public:?
????
/**
?????*?Check?current?SocketInputStream?object?if?is?opened.?
?????*
?????*?@return??TRUE?if?opened?else?return?FALSE
?????
*/

????BOOL?isOpened();

????
/**
?????*?Reads?a?byte?of?data?from?this?input?stream.?This?method?blocks
?????*?if?no?input?is?yet?available.
?????*
?????*?@return?????the?next?byte?of?data,?or?<code>-1</code>?if?the?end?of?the
?????*?????????????file?is?reached.
?????
*/

????
int?read();?

????
/**
?????*?Reads?up?to?<code>len</code>?bytes?of?data?from?this?input?stream
?????*?into?an?array?of?bytes.?This?method?blocks?until?some?input?is
?????*?available.
?????*
?????*?@param??????b?????the?buffer?into?which?the?data?is?read.
?????*?@param??????off???the?start?offset?of?the?data.
?????*?@param??????len???the?maximum?number?of?bytes?read.
?????*?@return?????the?total?number?of?bytes?read?into?the?buffer,?or
?????*?????????????<code>0</code>?if?there?is?no?more?data?because?the?end?of
?????*?????????????the?file?has?been?reached,?or?-1?if?read?error.
?????
*/

????
int?read(void?*b,?int?off,?int?len);

????
/**
?????*?Reads?up?to?<code>len</code>?bytes?of?data?from?this?input?stream
?????*?into?an?array?of?bytes.?This?method?blocks?until?some?input?is
?????*?available.
?????*
?????*?@param??????b?????the?buffer?into?which?the?data?is?read.
?????*?@param??????len???the?maximum?number?of?bytes?read.
?????*?@return?????the?total?number?of?bytes?read?into?the?buffer,?or
?????*?????????????<code>0</code>?if?there?is?no?more?data?because?the?end?of
?????*?????????????the?file?has?been?reached,?or?-1?if?read?error.
?????
*/

????
int?read(void?*b,?int?len);

????
/**
?????*?Skips?over?and?discards?<code>n</code>?bytes?of?data?from?the
?????*?input?stream.?The?<code>skip</code>?method?may,?for?a?variety?of
?????*?reasons,?end?up?skipping?over?some?smaller?number?of?bytes,
?????*?possibly?<code>0</code>.?The?actual?number?of?bytes?skipped?is?returned.
?????*
?????*?@param??????n???the?number?of?bytes?to?be?skipped.
?????*?@return?????the?actual?number?of?bytes?skipped.
?????
*/

????
long?skip(long?n);?

????
/**
?????*?Returns?the?number?of?bytes?that?can?be?read?from?this?file?input
?????*?stream?without?blocking.
?????*
?????*?@return?????the?number?of?bytes?that?can?be?read?from?this?file?input
?????*?????????????stream?without?blocking.
?????
*/

????
int?available();?

????
/**
?????*?Closes?this?file?input?stream?and?releases?any?system?resources
?????*?associated?with?the?stream.
?????*
?????*?<p>?If?this?stream?has?an?associated?channel?then?the?channel?is?closed
?????*?as?well.
?????
*/

????
void?close();

}
;


?

1?????????? SocketOutputStream

這個類類似與其他OutputStreamFileOutputStream類,是OutputStream接口類的一個實現(xiàn),執(zhí)行Socket流的寫操作,實現(xiàn)的接口均是最基礎(chǔ)的操作,如寫一個byte字節(jié)的數(shù)據(jù),或者寫指定長度的數(shù)據(jù)。

SocketOutputStream類成員和主要接口定義如下:

?

class?SocketOutputStream?:?public?OutputStream
{
protected:?
????
/**
?????*?Pointer?to?the?implementation?of?this?SocketImpl.
?????
*/

????PlainSocketImpl?
*_impl;?

????
/**
?????*?Pointer?to?the?implementation?of?this?Socket.
?????
*/

Socket?
*_socket;

????
/**
?????*?Creates?a?new?SocketOutputStream.?Can?only?be?called
?????*?by?a?Socket.?This?method?needs?to?hang?on?to?the?owner?Socket?so
?????*?that?the?fd?will?not?be?closed.
?????*?@param?impl?the?implemented?socket?input?stream
?????
*/

????SocketOutputStream(PlainSocketImpl?
&impl);

public:?
????
/**
?????*?Check?current?SocketInputStream?object?if?is?opened.?
?????*
?????*?@return??TRUE?if?opened?else?return?FALSE
?????
*/

????BOOL?isOpened();?

????
/**
?????*?Report?position?in?output?stream.
?????
*/
?
long?tellp();

????
/**
?????*?Writes?the?specified?byte?to?this?file?output?stream.?Implements?
?????*?the?<code>write</code>?method?of?<code>OutputStream</code>.
?????*
?????*?@param?b???the?byte?to?be?written.
?????
*/

????SocketOutputStream
&?write(int?b);?

????
/**
?????*?Writes?<code>len</code>?bytes?from?the?specified?byte?array?
?????*?starting?at?offset?<code>off</code>?to?this?file?output?stream.?
?????*
?????*?@param??????b?????the?data.
?????*?@param??????len???the?number?of?bytes?to?write.
?????
*/

????SocketOutputStream
&?write(const?void?*b,?int?len);?

????
/**
?????*?Writes?<code>len</code>?bytes?from?the?specified?byte?array?
?????*?starting?at?offset?<code>off</code>?to?this?file?output?stream.?
?????*
?????*?@param??????b?????the?data.
?????*?@param??????off???the?start?offset?in?the?data.
?????*?@param??????len???the?number?of?bytes?to?write.
?????
*/

????SocketOutputStream
&?write(const?void?*b,?int?off,?int?len);?

????
/**
?????*?Flushes?this?output?stream?and?forces?any?buffered?
?????*?output?bytes?to?be?written?out.
?????
*/

????
void?flush();?

????
/**
?????*?Closes?this?file?out?stream?and?releases?any?system?resources
?????*?associated?with?the?stream.
?????*
?????*?<p>?If?this?stream?has?an?associated?channel?then?the?channel?is?closed
?????*?as?well.
?????
*/

????
void?close();

}
;


?

1?????????? SocketReader類和SocketWriter

SocketReader類實現(xiàn)了一個對Socket流讀設(shè)備即SocketInputStream的讀取器,它實現(xiàn)了Reader接口類的方法,所以具有與其它Reader相同的功能,也可以與其它一些讀操作器如BufferedReader配合使用以達(dá)到一些更高級的功能。

SocketWriter 類則實現(xiàn)了一個對Socket流寫設(shè)備即SocketOutputStream的寫操作器,它實現(xiàn)了Writer接口類的方法,所以具有與其它Writer相同的功能,如進(jìn)行一些operator <<運算符的操作等。

詳細(xì)例子請參考 httptest.cpp 范例程序。

?

?

?

C++通用框架的設(shè)計作者:naven 日期:2006-8-10


?

posted on 2006-08-10 00:46 Javen-Studio 閱讀(8609) 評論(15)  編輯 收藏 引用

評論

# re: SOCKET的封裝 2006-08-10 06:57 萬連文
代碼呢???可以給我一份???
wlwlxj@gmail.com
謝謝  回復(fù)  更多評論
  

# re: SOCKET的封裝 2006-08-10 10:23 Javen-Studio
首頁可以下載試用版本,源碼等我完成后會open source的,thx  回復(fù)  更多評論
  

# re: SOCKET的封裝 2006-08-10 18:16 子彈
不錯,

我最近也在學(xué)習(xí)NETWORK編程

希望能與你交流  回復(fù)  更多評論
  

# re: SOCKET的封裝 2006-08-10 18:22 navy
好啊,一起學(xué)習(xí)~  回復(fù)  更多評論
  

# re: SOCKET的封裝 2006-08-15 12:21 可冰
不錯。
不知道naven了解ACE不,感覺有一點類似。不過我覺得更像JAVA。  回復(fù)  更多評論
  

# re: SOCKET的封裝 2006-08-15 13:56 Javen-Studio
是啊,我就是學(xué)習(xí)了一些ACE的設(shè)計想法做的,接口都仿照java  回復(fù)  更多評論
  

# re: SOCKET的封裝 2011-07-22 14:17 this 王
能給我份源碼?  回復(fù)  更多評論
  

# re: SOCKET的封裝 2012-02-28 22:13 FrankWang
380330439@qq.com
能給我一份源代碼嗎?
我也在學(xué)這個。  回復(fù)  更多評論
  

# re: SOCKET的封裝[未登錄] 2012-04-30 14:59 cc
371549734@qq.com
如果可以,麻煩也給我一份 謝謝了  回復(fù)  更多評論
  

# re: SOCKET的封裝 2012-11-12 12:38 sammy
看了你的文章,感覺封裝的不錯。能給我一份源代碼嗎?
sammylymhk@yahoo.com.cn  回復(fù)  更多評論
  

# re: SOCKET的封裝 2013-04-01 18:33 楊平
有源代碼嗎?請轉(zhuǎn)一份給我啊,qq:448086006@qq.com,多謝!  回復(fù)  更多評論
  

# re: SOCKET的封裝 2014-05-08 16:55 weiqinyu
寫的真好。能發(fā)給我一份嗎?weiqinyu2005@163.com  回復(fù)  更多評論
  

# re: SOCKET的封裝 2015-03-21 18:32 陳甜
寫的真好。能發(fā)給我一份嗎?283063526@qq.com  回復(fù)  更多評論
  

# re: SOCKET的封裝 2015-07-19 17:29 莫莫
看了你的文章,感覺封裝的不錯。能給我一份源代碼嗎?@Javen-Studio
gypzfabc@126.com  回復(fù)  更多評論
  


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   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>
            亚洲一卡久久| 久久久久久亚洲精品杨幂换脸| 一区二区三区|亚洲午夜| 午夜精品久久久久久99热软件| 亚洲国产成人av好男人在线观看| 一区二区三区四区蜜桃| 欧美高清成人| 在线看国产日韩| 久久精品视频亚洲| 亚洲伊人一本大道中文字幕| 欧美午夜片在线观看| 日韩视频在线免费| 欧美激情综合色| 美女91精品| 亚洲激情在线激情| 亚洲黄色在线观看| 欧美国产一区二区在线观看| 亚洲日本理论电影| 亚洲精品国产精品乱码不99| 欧美精品手机在线| 亚洲午夜精品视频| 亚洲午夜一二三区视频| 国产欧美va欧美不卡在线| 久久不射中文字幕| 久久电影一区| 亚洲国产美女精品久久久久∴| 欧美国产一区视频在线观看| 欧美成ee人免费视频| 亚洲天堂成人| 香蕉亚洲视频| 1024成人网色www| 亚洲国产人成综合网站| 欧美日韩亚洲一区二区三区在线观看| 一区二区三区国产在线观看| 亚洲一区二区在线视频| 国产一区再线| 亚洲第一精品久久忘忧草社区| 欧美91精品| 亚洲男人第一av网站| 久久国产精品72免费观看| 亚洲国产精品t66y| av成人国产| 伊人久久久大香线蕉综合直播| 欧美国产三区| 国产精品毛片在线| 欧美国产一区在线| 国产精品久久久久久亚洲毛片 | 亚洲免费一区二区| 亚洲黄网站黄| 国产精品免费电影| 免费在线观看日韩欧美| 欧美激情偷拍| 欧美一区二区在线播放| 毛片精品免费在线观看| 亚洲一区网站| 久久一二三四| 午夜视频久久久久久| 女女同性女同一区二区三区91| 亚洲综合国产精品| 久久综合九色综合久99| 亚洲欧美在线另类| 欧美二区在线播放| 久久午夜电影| 国产精品美女久久| 亚洲日本成人女熟在线观看| 国内精品亚洲| 亚洲欧美国产视频| 亚洲天堂成人在线视频| 免费成人av在线| 久久久天天操| 国产精品久久久久久久久久免费| 欧美成人一品| 激情成人综合网| 亚洲欧美日本在线| 亚洲与欧洲av电影| 欧美日本高清| 欧美激情影院| 亚洲电影在线看| 久久久久久国产精品mv| 欧美一二三视频| 国产精品国产三级国产aⅴ浪潮| 亚洲国产精品高清久久久| 亚洲福利视频在线| 久久久久久亚洲精品不卡4k岛国| 欧美专区在线观看| 国产精品亚洲成人| 亚洲午夜激情免费视频| 亚洲一区二区免费| 欧美三级视频在线播放| 日韩视频在线观看一区二区| 亚洲美女毛片| 欧美成人精品一区| 亚洲激情国产精品| 99在线精品免费视频九九视| 欧美精品成人| 亚洲另类自拍| 一区二区高清在线| 欧美午夜免费影院| 亚洲欧美日韩第一区| 久久久久九九视频| 一区视频在线播放| 久久伊人一区二区| 欧美大成色www永久网站婷| 91久久久亚洲精品| 欧美美女视频| 99国产精品| 午夜精品视频在线| 国产日韩精品久久| 久久久精品国产一区二区三区 | 一区二区久久久久| 亚洲视频综合| 国产乱码精品一区二区三区av| 欧美一区二区黄| 欧美精品一区二区蜜臀亚洲 | 午夜欧美不卡精品aaaaa| 久久精品国产精品亚洲综合| 狠狠干狠狠久久| 欧美v日韩v国产v| 日韩视频一区二区在线观看| 午夜精品久久久久| 国产一区二区三区无遮挡| 久久综合999| 亚洲精品在线视频| 久久国产精品一区二区三区| 亚洲黄色有码视频| 国产精品久久久久久久久免费桃花| 欧美一区二区三区成人| 欧美激情第3页| 亚洲欧美在线免费观看| 激情综合色丁香一区二区| 欧美精品在线免费| 欧美影院在线| 亚洲美女区一区| 久久久精品2019中文字幕神马| 日韩午夜在线观看视频| 国产情人综合久久777777| 欧美福利专区| 亚洲欧美日韩精品久久| 亚洲人成网站999久久久综合| 久久精品国产v日韩v亚洲 | 亚洲欧洲一区二区在线播放| 国产精品毛片va一区二区三区| 99精品欧美一区| 欧美视频一区在线| 久久免费黄色| 一级日韩一区在线观看| 免费观看亚洲视频大全| 亚洲欧美一区二区原创| 亚洲日本在线观看| 国产人妖伪娘一区91| 欧美日韩大片| 久久综合成人精品亚洲另类欧美| 亚洲一区二区三区精品在线观看 | 91久久国产综合久久蜜月精品| 久久精品动漫| 亚洲欧美在线网| 一区二区三区黄色| 亚洲黑丝在线| 99国产精品国产精品久久| 日韩亚洲国产精品| 在线日韩av永久免费观看| 国内精品免费在线观看| 国产三级欧美三级日产三级99| 久久一区二区三区四区| 欧美在线免费一级片| 午夜免费在线观看精品视频| 亚洲婷婷综合色高清在线| 日韩视频一区二区三区在线播放免费观看 | 亚洲国产精品久久人人爱蜜臀| 另类天堂视频在线观看| 久久精品国产77777蜜臀 | 久久福利视频导航| 亚洲最新视频在线播放| 亚洲美女啪啪| 夜久久久久久| 亚洲综合欧美| 欧美一级视频| 久久综合亚州| 欧美成人久久| 亚洲激情综合| 一区二区三区波多野结衣在线观看| 日韩一区二区免费高清| 9久re热视频在线精品| 国产精品99久久久久久有的能看| 99国产精品久久久久久久成人热 | 欧美午夜视频在线| 欧美日韩综合不卡| 国产精品任我爽爆在线播放| 国产三区精品| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲国产综合91精品麻豆| 亚洲精品中文字幕有码专区| 夜夜嗨av一区二区三区| 亚洲欧美影院| 久久亚洲国产精品日日av夜夜| 欧美电影在线| 一区二区三区产品免费精品久久75| 午夜精品久久久久久久久久久久久| 久久精品色图| 欧美日韩精选|