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

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++ 通用框架的設計 作者: naven

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

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

?

主要有如下一些類

?

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

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

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

class SocketAcceptor??????????????????????????????????? 一個 TCP 服務端的接收器

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

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

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

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

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

?

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

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

下面的程序示例如何用上面的類進行 Scoket 通訊:

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

}


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

此類定義一個表示 Socket 連接的類,一個 Socket 是一個為在兩臺機器間通信的端點。一個 Socket 類的真實行為是通過一個 SocketImpl 類的詩體執(zhí)行的。一個應用程序可以通過改變 Socket Factory 來創(chuàng)建 Socket 的具體實現(xiàn),以適應本地的局域網(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)一個用于服務器端接收連接的類。一個SocketAcceptor對象等待來自網(wǎng)絡的連接請求,它執(zhí)行一些基于請求的操作,并且可能返回一些信息給請求者。連接成功后SocketAcceptor會生成一個Socket對象用于網(wǎng)絡通訊。

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)一個用于客戶器端連接服務的類。一個SocketConnector對象可以向指定的服務地址和端口發(fā)出的連接請求,它執(zhí)行一些基于請求的操作,并且可能返回一些信息。連接成功后SocketConnector會生成一個Socket對象用于網(wǎng)絡通訊。

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)的接口均是最基礎的操作,如讀取一個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)的接口均是最基礎的操作,如寫一個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流讀設備即SocketInputStream的讀取器,它實現(xiàn)了Reader接口類的方法,所以具有與其它Reader相同的功能,也可以與其它一些讀操作器如BufferedReader配合使用以達到一些更高級的功能。

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

詳細例子請參考 httptest.cpp 范例程序。

?

?

?

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


?

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

評論

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

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

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

我最近也在學習NETWORK編程

希望能與你交流  回復  更多評論
  

# re: SOCKET的封裝 2006-08-10 18:22 navy
好啊,一起學習~  回復  更多評論
  

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

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

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

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

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

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

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

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

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

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   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视频国产精品免费观看| 亚洲精品国产拍免费91在线| 亚洲国产午夜| 亚洲欧洲在线视频| 亚洲国产欧美日韩| 亚洲大胆av| 亚洲国产影院| 亚洲欧洲日韩在线| 亚洲精品国产精品乱码不99 | 欧美福利一区| 欧美精品在线极品| 国产精品久久久久9999| 国产日韩在线一区| 狠狠色伊人亚洲综合成人| 亚洲国产精品久久91精品| 日韩视频一区二区三区在线播放免费观看| 99在线热播精品免费99热| 亚洲综合第一页| 久久精品一区二区三区四区 | 亚洲黄页一区| 亚洲精品在线二区| 亚洲一区二区三区四区视频| 久久精品免费看| 欧美激情亚洲自拍| 国产乱码精品一区二区三区五月婷| 国产在线精品二区| 亚洲精品在线视频观看| 性一交一乱一区二区洋洋av| 久久亚洲影音av资源网| 亚洲精品三级| 欧美在线3区| 欧美激情一区二区三区全黄| 国产精品美女www爽爽爽视频| 激情久久五月| 亚洲伊人伊色伊影伊综合网 | 国产精品久久久久影院亚瑟| 狠狠久久婷婷| 亚洲一区二区高清视频| 久久综合九色综合久99| av成人免费在线| 久久久久久97三级| 国产精品电影在线观看| 在线看无码的免费网站| 亚洲欧美一区二区视频| 亚洲成色777777在线观看影院| 中日韩午夜理伦电影免费| 久久裸体艺术| 国产精品日韩在线播放| 日韩视频一区二区在线观看| 久久久久久久成人| 一本色道久久综合亚洲精品不卡 | 这里只有精品丝袜| 久久夜精品va视频免费观看| 国产精品一区二区在线观看网站| 亚洲精品久久久久久久久久久| 久久国产精品久久久久久电车| 日韩亚洲国产精品| 麻豆国产精品一区二区三区| 国产日韩精品一区二区浪潮av| 一区二区欧美精品| 欧美sm极限捆绑bd| 久久国产精品99久久久久久老狼 | 老司机精品福利视频| 国产伦一区二区三区色一情| 一本久久知道综合久久| 欧美风情在线| 久久精品在线观看| 国产欧美日韩视频一区二区三区| 一本色道久久99精品综合| 女人色偷偷aa久久天堂| 欧美一区午夜视频在线观看| 国产精品视频yy9099| 中国日韩欧美久久久久久久久| 亚洲电影第三页| 久久久人成影片一区二区三区观看 | 午夜精品成人在线视频| 亚洲精品婷婷| 欧美老女人xx| 亚洲毛片av| 亚洲国产欧美一区二区三区久久 | 激情视频一区二区三区| 欧美一区二区视频观看视频| 亚洲视频综合在线| 欧美日韩亚洲激情| 一区二区三区黄色| 亚洲欧洲日本在线| 欧美精品乱人伦久久久久久| 亚洲精品欧美日韩专区| 欧美激情中文字幕一区二区| 麻豆精品视频| 亚洲欧洲在线看| 亚洲欧洲精品一区二区三区不卡| 欧美国产专区| 一本一本久久a久久精品综合妖精| 亚洲激情亚洲| 欧美三级电影网| 亚洲在线观看免费| 亚洲在线观看免费| 国产日韩精品一区二区三区在线| 久久精品一区二区三区不卡牛牛| 久久爱另类一区二区小说| 国产在线乱码一区二区三区| 久久综合九色综合网站| 猛男gaygay欧美视频| 亚洲精品资源| 国产精品99久久久久久人| 国产精品美女999| 久久精品99国产精品| 久久久久久久精| 亚洲经典视频在线观看| 亚洲久久在线| 国产精品自拍在线| 久热精品视频在线观看| 欧美电影电视剧在线观看| 一区二区三区国产在线观看| 亚洲伊人久久综合| 精久久久久久| 亚洲国产精品视频| 国产精品国产三级国产aⅴ浪潮| 久久精品男女| 免费成人黄色av| 亚洲一区二区三区视频| 欧美一区2区三区4区公司二百| 在线观看成人小视频| 亚洲精品视频在线观看免费| 国产精品无码永久免费888| 美女成人午夜| 欧美日韩国产一区二区三区| 欧美一区永久视频免费观看| 久热国产精品| 亚洲欧美日本国产有色| 久久视频一区二区| 中日韩午夜理伦电影免费| 欧美在线观看网站| 99成人在线| 欧美影片第一页| 99re6热在线精品视频播放速度 | 欧美激情1区| 国产精品久久999| 女仆av观看一区| 国产精品成人一区| 欧美大胆a视频| 国产精品入口尤物| 亚洲国产精品久久91精品| 国产精品视区| 91久久线看在观草草青青| 国产欧美日本在线| 最新精品在线| 伊人久久大香线| 亚洲婷婷综合久久一本伊一区| 亚洲韩国一区二区三区| 亚洲欧美日本伦理| 一本色道久久88综合日韩精品| 欧美中文日韩| 亚洲欧美一区二区三区在线| 欧美插天视频在线播放| 久久麻豆一区二区| 国产精品久久久久久久久久三级| 亚洲二区精品| 一区在线免费| 午夜在线a亚洲v天堂网2018| 一区二区三区四区蜜桃| 免费高清在线视频一区·| 欧美一区日韩一区| 欧美午夜宅男影院在线观看| 欧美激情第一页xxx| 国产亚洲一级高清| 亚洲一区精彩视频| 一本色道久久综合狠狠躁篇怎么玩| 久久久亚洲国产天美传媒修理工| 欧美一区二区三区久久精品茉莉花 | 在线观看亚洲视频啊啊啊啊| 亚洲欧美欧美一区二区三区| 在线综合+亚洲+欧美中文字幕| 蜜臀av国产精品久久久久| 久久婷婷久久一区二区三区| 国产欧美欧洲在线观看| 中文网丁香综合网| 亚洲视频免费在线| 欧美精品在欧美一区二区少妇| 欧美国产日韩亚洲一区| 激情综合久久| 久久精品国产77777蜜臀 | 欧美手机在线| 亚洲经典在线| 亚洲精品在线免费| 免费精品视频| 免费精品视频| 亚洲国产成人porn| 久久久久一区二区| 鲁鲁狠狠狠7777一区二区|