在C 中實現Socket埠復用 C 應用

2021-04-17 02:43:23 字數 1589 閱讀 7569

一、什麼是埠復用:

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

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

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

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

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

public void setsocketoption (

socketoptionlevel optionlevel,

socketoptionname optionname,

int optionvalue

)引數

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埠復用

來自牧野的bloghttp www.cnblogs.com wzd24 一 什麼是埠復用 因為在winsock的實現中,對於伺服器的繫結是可以多重繫結的,在確定多重繫結使用誰的時候,根據一條原則是誰的指定最明確則將包遞交給誰,而且沒有許可權之分。這種多重繫結便稱之為埠復用。二 我們如何實現socke...