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

Javen-Studio 咖啡小屋

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

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

SOCKET 的封裝

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

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

Socket 通訊程序估計(jì)現(xiàn)在大多數(shù)應(yīng)用系統(tǒng)都會(huì)涉及到,因?yàn)楝F(xiàn)在的世界是一個(gè)由 Internet 網(wǎng)絡(luò)連接的世界,任何個(gè)人電腦或服務(wù)都可能會(huì)有數(shù)據(jù)交換,通過 TCP/UDP 這樣的 Socket 通訊協(xié)議進(jìn)行聯(lián)系。開發(fā)這樣的通訊程序會(huì)是很普遍也很類似,每種操作系統(tǒng)都實(shí)現(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)處理也不一樣,等等這些都造成編寫跨平臺(tái)的 Socket 應(yīng)用不太容易。另外編寫服務(wù)器和客戶端的處理步驟也很繁瑣, IP 地址和域名的轉(zhuǎn)換也很麻煩,所以實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)統(tǒng)一使用更簡(jiǎn)潔的 API 非常有用。本 C++ 框架基本參考 Java Socket 相關(guān)類實(shí)現(xiàn)了類似封裝,除了 ServerSocket 實(shí)現(xiàn)稍有不同,其他原理和方法基本類似。用它編寫網(wǎng)絡(luò)應(yīng)用基本不用考慮底層的協(xié)議處理,使用非常容易,代碼也更簡(jiǎn)潔易讀。

?

主要有如下一些類

?

class Socket ?????????????????????? ??????????????????????????? 代表一個(gè) TCP 連接的 Socket 對(duì)象

???????? class DatagramSocket??????????????????????????????????? 代表一個(gè) UDP 連接的 Socket 對(duì)象(暫未實(shí)現(xiàn))

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

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

class SocketConnector????????????????????????????????? 一個(gè) TCP 客戶端的連接器

???????? class SocketInputStream?????????????????????????????? 一個(gè) Socket 連接的輸入流

???????? class SocketOutputStream??????????????????????????? 一個(gè) Socket 連接的輸出流

???????? class SocketReader??????????????????????????????????????? 一個(gè) Socket 連接的讀操作器

???????? class SocketWriter????????????????????????????????????????? 一個(gè) Socket 連接的寫操作器

?

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

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

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

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

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

}

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

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

}


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

此類定義一個(gè)表示 Socket 連接的類,一個(gè) Socket 是一個(gè)為在兩臺(tái)機(jī)器間通信的端點(diǎn)。一個(gè) Socket 類的真實(shí)行為是通過一個(gè) SocketImpl 類的詩體執(zhí)行的。一個(gè)應(yīng)用程序可以通過改變 Socket Factory 來創(chuàng)建 Socket 的具體實(shí)現(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

此類實(shí)現(xiàn)一個(gè)用于服務(wù)器端接收連接的類。一個(gè)SocketAcceptor對(duì)象等待來自網(wǎng)絡(luò)的連接請(qǐng)求,它執(zhí)行一些基于請(qǐng)求的操作,并且可能返回一些信息給請(qǐng)求者。連接成功后SocketAcceptor會(huì)生成一個(gè)Socket對(duì)象用于網(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

此類實(shí)現(xiàn)一個(gè)用于客戶器端連接服務(wù)的類。一個(gè)SocketConnector對(duì)象可以向指定的服務(wù)地址和端口發(fā)出的連接請(qǐng)求,它執(zhí)行一些基于請(qǐng)求的操作,并且可能返回一些信息。連接成功后SocketConnector會(huì)生成一個(gè)Socket對(duì)象用于網(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

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

這個(gè)類類似與其他OutputStreamFileOutputStream類,是OutputStream接口類的一個(gè)實(shí)現(xiàn),執(zhí)行Socket流的寫操作,實(shí)現(xiàn)的接口均是最基礎(chǔ)的操作,如寫一個(gè)byte字節(jié)的數(shù)據(jù),或者寫指定長(zhǎng)度的數(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類實(shí)現(xiàn)了一個(gè)對(duì)Socket流讀設(shè)備即SocketInputStream的讀取器,它實(shí)現(xiàn)了Reader接口類的方法,所以具有與其它Reader相同的功能,也可以與其它一些讀操作器如BufferedReader配合使用以達(dá)到一些更高級(jí)的功能。

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

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

?

?

?

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


?

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

評(píng)論

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(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>
            国产精品一区在线观看你懂的| 一区二区三区色| 欧美日韩dvd在线观看| 亚洲视屏一区| 午夜国产精品影院在线观看| 国内久久婷婷综合| 亚洲国产精品久久久| 欧美日韩在线一二三| 久久精品成人欧美大片古装| 久久天堂成人| 亚洲视频在线一区观看| 午夜精品久久久久久久久久久| 在线欧美不卡| 99国产精品99久久久久久| 国产美女高潮久久白浆| 欧美国产精品一区| 99re6热在线精品视频播放速度| 欧美视频日韩| 久久露脸国产精品| 欧美日本国产一区| 久久精品电影| 欧美另类极品videosbest最新版本| 亚洲欧美在线看| 蜜桃久久精品乱码一区二区| 亚洲一区三区电影在线观看| 久久久av网站| 亚洲视频999| 久久国产精品黑丝| 亚洲无毛电影| 久久亚洲精品中文字幕冲田杏梨| 亚洲视频碰碰| 久久久美女艺术照精彩视频福利播放| 在线一区欧美| 久久人人97超碰精品888| 亚洲一区中文字幕在线观看| 另类尿喷潮videofree| 午夜精品久久久久久久99热浪潮| 久久在线视频| 欧美一区二区三区视频在线| 欧美激情小视频| 久久久久久久久蜜桃| 欧美日韩国产影院| 免费在线观看成人av| 国产精品日韩欧美大师| 亚洲国产高潮在线观看| 国产一区二区三区久久| 99在线精品免费视频九九视| 亚洲国产另类久久久精品极度| 亚洲一区二区三区免费在线观看| 亚洲精品久久| 久久激情久久| 亚洲欧美视频一区二区三区| 欧美精品久久久久久久免费观看| 久久全球大尺度高清视频| 国产精品久久久久久久午夜| 亚洲国产日本| 禁久久精品乱码| 亚洲免费影视| 在线亚洲欧美视频| 麻豆精品精华液| 久久久99爱| 国产精品免费视频观看| 亚洲精品在线视频| 亚洲黄色在线视频| 久久久久久久久久久成人| 欧美一二三视频| 欧美午夜不卡| 亚洲精品久久久久中文字幕欢迎你| 亚洲大片一区二区三区| 欧美亚洲日本网站| 午夜视频在线观看一区二区三区| 欧美人与禽猛交乱配| 亚洲国产精品久久久久秋霞影院 | 欧美**人妖| 美女日韩欧美| 国产一级揄自揄精品视频| 亚洲一区二区免费在线| 中国成人在线视频| 欧美日本亚洲韩国国产| 亚洲国产天堂久久综合| 亚洲黄色天堂| 美女精品国产| 欧美sm视频| 亚洲电影欧美电影有声小说| 久久精品一区二区| 久久男人av资源网站| 国产综合色一区二区三区| 亚洲欧美色一区| 欧美与黑人午夜性猛交久久久| 国产精品裸体一区二区三区| 一本久久a久久精品亚洲| 亚洲天天影视| 欧美偷拍另类| 中文精品在线| 亚洲欧美成人一区二区在线电影| 欧美三级视频| 中国日韩欧美久久久久久久久| 亚洲一区二区三区四区视频| 国产精品国产自产拍高清av| 亚洲视频福利| 欧美一区日韩一区| 国产视频一区免费看| 欧美一区二区在线视频| 久久中文字幕一区| 在线日韩欧美视频| 欧美不卡高清| 亚洲免费观看视频| 亚洲一区二区在线免费观看视频| 国产精品xvideos88| 亚洲综合日韩中文字幕v在线| 欧美一区深夜视频| 国产一区 二区 三区一级| 久久精品一二三区| 欧美激情一区二区三区在线视频 | 亚洲人成久久| 亚洲图片欧美一区| 国产精品五月天| 久久精品1区| 欧美激情五月| 一区二区三区鲁丝不卡| 国产精品久久久久秋霞鲁丝| 午夜日韩av| 免播放器亚洲一区| 亚洲乱码国产乱码精品精| 欧美视频一区二区| 午夜激情久久久| 欧美a级片网| 日韩一区二区久久| 欧美肉体xxxx裸体137大胆| 亚洲欧美乱综合| 久久精品免费电影| 亚洲国产精品一区二区尤物区 | 美脚丝袜一区二区三区在线观看| 亚洲黄色视屏| 亚洲欧美第一页| 黄色成人av网| 欧美久久婷婷综合色| 亚洲一区二区三区中文字幕在线| 久久艳片www.17c.com| 亚洲欧洲视频在线| 欧美性久久久| 久久久精彩视频| 亚洲乱码日产精品bd| 欧美一区在线看| 亚洲精华国产欧美| 国产精品扒开腿做爽爽爽视频| 欧美中文字幕| 亚洲激情在线观看| 欧美在线视频观看| 亚洲激情综合| 国产精品中文字幕在线观看| 麻豆成人在线| 亚洲一区二区四区| 亚洲成人自拍视频| 亚洲综合视频1区| 韩国女主播一区| 欧美日韩一区二区三区四区五区| 午夜视频一区二区| 亚洲人成人77777线观看| 久久激情综合| 一本色道久久88亚洲综合88| 国产在线拍揄自揄视频不卡99| 欧美精品激情blacked18| 欧美一区二区三区在线看| 91久久黄色| 久久久五月婷婷| 亚洲一区中文字幕在线观看| 在线观看亚洲一区| 国产精品爽黄69| 欧美黄色影院| 久久精品99国产精品日本| 亚洲免费大片| 欧美不卡视频一区发布| 亚洲欧美日本在线| 亚洲国产欧美日韩| 国产亚洲激情在线| 欧美视频日韩视频在线观看| 另类专区欧美制服同性| 亚洲免费综合| 99精品国产在热久久| 欧美承认网站| 久久精品视频免费播放| 亚洲一区二区成人| 亚洲精品资源美女情侣酒店| 国内激情久久| 国产精品日本| 欧美日韩裸体免费视频| 久久综合色影院| 香蕉免费一区二区三区在线观看| 99热在这里有精品免费| 亚洲电影免费观看高清完整版在线 | 在线中文字幕一区| 亚洲级视频在线观看免费1级| 久久综合九色综合欧美就去吻 | 欧美jjzz| 久久久久久亚洲综合影院红桃 | 亚洲午夜精品网| 亚洲日韩欧美一区二区在线| 欧美成在线视频| 久久综合免费视频影院|