在C 中實現Socket埠復用

2021-04-14 19:34:20 字數 1784 閱讀 5848

來自牧野的bloghttp://www.cnblogs.com/wzd24/

一、什麼是埠復用:

因為在winsock的實現中,對於伺服器的繫結是可以多重繫結的,在確定多重繫結使用誰的時候,根據一條原則是誰的指定最明確則將包遞交給誰,而且沒有許可權之分。這種多重繫結便稱之為埠復用。

二、我們如何實現socket埠復用:

其實我們要實現埠復用很簡單,我們只要使用setsocketoption函式設定socket選項就可以了。msdn是這樣解釋的:

socket 選項確定當前 socket 的行為。對於具有

boolean

資料型別的選項,指定非零值可啟用該選項,指定零值可禁用該選項。對於具有整數資料型別的選項,指定適當的值。socket 選項按照協議支援程度來分組。

我們來看看這個函式是怎麼用的:

public

void

setsocketoption (

socketoptionlevel optionlevel,

socketoptionname optionname,

intoptionvalue

) 引數 optionlevel

socketoptionlevel 值之一。

optionname

socketoptionname 值之一。

optionvalue

該選項的值。

以上引數大家可以去看看msdn。我這裡就不多講了。

在這裡我們optionlevel 引數傳socketoptionlevel.socket;optionname引數傳socketoptionname.reuseaddress;optionvalue參傳乙個非零值,我傳的是true,如果要禁用的話,就傳false。

如:socket2.setsocketoption(socketoptionlevel.socket, socketoptionname.reuseaddress, 

true);

具體我們看看下面的**:

我們首先建立第乙個socket:

socket socket1;

ipendpoint localep 

=new

ipendpoint(ipaddress.any, 

20000

);socket1 

=new

socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);

socket1.bind(localep);

再建立第二個socket:

socket socket2

ipendpoint localep 

=new

ipendpoint(ipaddress.any, 

20000

);socket2

=new

socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);

socket2.setsocketoption(socketoptionlevel.socket, socketoptionname.reuseaddress, 

true

);//請注意這一句。reuseaddress選項設定為true將允許將套接字繫結到已在使用中的位址。 

socket2.bind(localep);

這樣socket1和socket2便繫結在同乙個埠上了。

在C 中實現Socket埠復用

一 什麼是埠復用 因為在winsock的實現中,對於伺服器的繫結是可以多重繫結的,在確定多重繫結使用誰的時候,根據一條原則是誰的指定最明確則將包遞交給誰,而且沒有許可權之分。這種多重繫結便稱之為埠復用。二 我們如何實現socket埠復用 其實我們要實現埠復用很簡單,我們只要使用setsocketop...

在C 中實現Socket埠復用

一 什麼是埠復用 因為在winsock的實現中,對於伺服器的繫結是可以多重繫結的,在確定多重繫結使用誰的時候,根據一條原則是誰的指定最明確則將包遞交給誰,而且沒有許可權之分。這種多重繫結便稱之為埠復用。二 我們如何實現socket埠復用 其實我們要實現埠復用很簡單,我們只要使用setsocketop...

在C 中實現Socket埠復用

其實我們要實現埠復用很簡單,我們只要使用setsocketoption函式設定socket選項就可以了。msdn是這樣解釋的 socket 選項確定當前 socket 的行為。對於具有 boolean 資料型別的選項,指定非零值可啟用該選項,指定零值可禁用該選項。對於具有整數資料型別的選項,指定適當...