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

Javen-Studio 咖啡小屋

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

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(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ù)交換,通過(guò) TCP/UDP 這樣的 Socket 通訊協(xié)議進(jìn)行聯(lián)系。開(kāi)發(fā)這樣的通訊程序會(huì)是很普遍也很類似,每種操作系統(tǒng)都實(shí)現(xiàn)了 Socket 通訊庫(kù)并提供很相似的 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)處理也不一樣,等等這些都造成編寫(xiě)跨平臺(tái)的 Socket 應(yīng)用不太容易。另外編寫(xiě)服務(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)稍有不同,其他原理和方法基本類似。用它編寫(xiě)網(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 連接的寫(xiě)操作器

?

Socket 的意思是在網(wǎng)絡(luò)的機(jī)器之間建立一個(gè)通信線路。通過(guò) TCP Sockets 發(fā)送或接收的操作時(shí)通過(guò) 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();?
????????
// ?獲取此連接的讀操作器和寫(xiě)操作器
????????Reader? & rd? = ?sk.getReader();?
????????Writer?
& wr? = ?sk.getWriter();?
????????String?s;?
????????
// ?從客戶端讀取?10?個(gè)字節(jié)
????????rd.read(s,? 10 );?
????????
// ?向客戶端寫(xiě)信息
????????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()?)?
{
????
// ?獲取此連接的讀操作器和寫(xiě)操作器
????????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í)行為是通過(guò)一個(gè) SocketImpl 類的詩(shī)體執(zhí)行的。一個(gè)應(yīng)用程序可以通過(guò)改變 Socket Factory 來(lái)創(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ì)象等待來(lái)自網(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流的寫(xiě)操作,實(shí)現(xiàn)的接口均是最基礎(chǔ)的操作,如寫(xiě)一個(gè)byte字節(jié)的數(shù)據(jù),或者寫(xiě)指定長(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流寫(xiě)設(shè)備即SocketOutputStream的寫(xiě)操作器,它實(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 閱讀(8609) 評(píng)論(15)  編輯 收藏 引用

評(píng)論

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

# re: SOCKET的封裝 2006-08-10 10:23 Javen-Studio
首頁(yè)可以下載試用版本,源碼等我完成后會(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不,感覺(jué)有一點(diǎn)類似。不過(guò)我覺(jué)得更像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的封裝[未登錄](méi) 2012-04-30 14:59 cc
371549734@qq.com
如果可以,麻煩也給我一份 謝謝了  回復(fù)  更多評(píng)論
  

# re: SOCKET的封裝 2012-11-12 12:38 sammy
看了你的文章,感覺(jué)封裝的不錯(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
寫(xiě)的真好。能發(fā)給我一份嗎?weiqinyu2005@163.com  回復(fù)  更多評(píng)論
  

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

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


只有注冊(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>
            亚洲经典三级| 亚洲免费久久| 欧美刺激午夜性久久久久久久| 亚洲欧美日韩一区二区三区在线观看 | 国产日产欧美a一级在线| 欧美另类在线观看| 欧美日韩一区二区三区在线视频 | 国产精品福利网站| 国产伦精品一区| 一区二区三区在线高清| 亚洲国产99| 亚洲无吗在线| 久久成人免费网| 欧美电影免费观看| 一本色道久久综合亚洲二区三区| 亚洲一区二区三区在线| 久久久久九九九| 欧美日韩一区二区三区在线观看免 | 欧美成人一区二区三区| 男人天堂欧美日韩| 欧美日韩国产综合新一区| 国产九九精品视频| 亚洲精品美女在线| 久久精品五月| 亚洲国产色一区| 午夜欧美精品| 欧美久久久久久久久久| 国产日韩欧美中文| 亚洲最新合集| 麻豆久久精品| 亚洲一级高清| 欧美久久视频| 一本色道久久综合亚洲精品不| 国产精品视频xxxx| 黑人巨大精品欧美黑白配亚洲 | 免费观看成人鲁鲁鲁鲁鲁视频 | 久久影院亚洲| 亚洲精品视频免费在线观看| 欧美与欧洲交xxxx免费观看 | 亚洲精品视频在线观看免费| 一卡二卡3卡四卡高清精品视频| 久久精品国产清高在天天线 | 在线性视频日韩欧美| 久久视频一区| 国产一区二区精品丝袜| 亚洲午夜精品17c| 亚洲高清在线观看一区| 欧美一区二区三区精品| 国产精品久线观看视频| 一区二区欧美精品| 亚洲欧洲一区二区三区在线观看 | 国产精品久久77777| 日韩视频一区二区三区| 欧美成人在线网站| 久久亚洲欧美| 在线精品国产欧美| 久久先锋资源| 久久久久久久久久码影片| 国产精品丝袜久久久久久app| 夜夜嗨av一区二区三区网站四季av| 免费看av成人| 免费的成人av| 亚洲日韩视频| 亚洲激情成人网| 欧美激情女人20p| 一本色道精品久久一区二区三区| 亚洲国产精品福利| 欧美激情综合亚洲一二区| 亚洲精品影视在线观看| 亚洲黄色毛片| 欧美性感一类影片在线播放 | 亚洲日本成人网| 亚洲成人在线视频播放 | 葵司免费一区二区三区四区五区| 亚洲尤物在线视频观看| 久久精品国产亚洲高清剧情介绍| 国产欧美一区二区三区另类精品 | 中文日韩欧美| 一本综合久久| 国产婷婷色综合av蜜臀av| 久久夜色精品国产| 欧美大片在线看| 亚洲免费在线精品一区| 亚洲无线一线二线三线区别av| 国产日产亚洲精品系列| 美女黄色成人网| 欧美三级资源在线| 久久经典综合| 欧美黄色aaaa| 性8sex亚洲区入口| 免费观看亚洲视频大全| 一区二区三区四区在线| 亚洲女同同性videoxma| 在线观看不卡| 一区二区三区色| 1024亚洲| 亚洲网站在线看| 亚洲国产精品传媒在线观看 | 欧美国产一区在线| 国产精品国产精品| 欧美mv日韩mv国产网站app| 欧美日韩精品久久| 久久久人成影片一区二区三区 | 国产亚洲精品一区二555| 亚洲成色777777女色窝| 国产精品美女久久久久久2018| 免费看av成人| 国产亚洲一本大道中文在线| 亚洲精品中文字幕在线| 黄色欧美日韩| 亚洲男同1069视频| 亚洲天堂成人在线观看| 噜噜噜噜噜久久久久久91| 午夜精品久久久久久久久 | 国产精品成人av性教育| 欧美69视频| 韩国v欧美v日本v亚洲v| 一区二区欧美在线| 亚洲精品国精品久久99热| 久久精品国产69国产精品亚洲| 亚洲午夜未删减在线观看| 麻豆久久婷婷| 久久综合狠狠综合久久综青草| 国产精品毛片大码女人| 亚洲精品一区二区三区婷婷月 | 免费成人黄色片| 免费一级欧美片在线播放| 午夜精品久久久久久久久久久久久 | 在线成人欧美| 正在播放欧美一区| 亚洲精品中文字| 久久久久久亚洲精品中文字幕| 性色av一区二区三区| 欧美性做爰毛片| 亚洲精品久久久蜜桃| 亚洲欧洲免费视频| 玖玖玖免费嫩草在线影院一区| 久久亚洲精品一区| 狠狠综合久久av一区二区老牛| 欧美一区二区三区视频免费| 欧美中文在线观看| 国内精品嫩模av私拍在线观看| 亚洲欧美一区二区原创| 久久久久久有精品国产| 一区二区三区在线免费观看| 久久久久久久网站| 欧美激情视频一区二区三区在线播放 | 毛片一区二区三区| 免费久久99精品国产| 好看的日韩视频| 久久夜色精品一区| 亚洲人成在线影院| 亚洲一区二区三区四区五区午夜| 欧美午夜不卡视频| 午夜久久黄色| 欧美成人四级电影| 亚洲作爱视频| 国产欧美一级| 久久综合影音| 一本久久青青| 久久精品盗摄| 亚洲精品国产精品国产自| 欧美日韩在线视频一区| 午夜精品久久99蜜桃的功能介绍| 玖玖国产精品视频| 一区二区三区四区五区视频| 国产欧美二区| 欧美承认网站| 欧美一区二区三区精品电影| 欧美激情影院| 性色av一区二区三区在线观看| 一区二区亚洲精品国产| 欧美日韩一区二区三区高清| 欧美在线免费视屏| 亚洲伦伦在线| 久久资源在线| 亚洲小说区图片区| 一区二区三区在线观看国产| 欧美日韩 国产精品| 欧美一区二区三区免费观看视频| 欧美成人在线网站| 欧美综合77777色婷婷| 亚洲片区在线| 国产一区二三区| 欧美性开放视频| 国产午夜精品视频| 欧美亚一区二区| 麻豆精品国产91久久久久久| 亚洲深夜福利视频| 亚洲国产精品99久久久久久久久| 午夜欧美精品久久久久久久| 亚洲人成网站色ww在线| 国产日韩欧美在线看| 欧美视频精品一区| 欧美a级在线| 久久精品亚洲| 欧美一区视频| 亚洲欧美日韩精品久久奇米色影视 | 欧美国产精品v| 欧美一区不卡|