來自牧野的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 資料型別的選項,指定非零值可啟用該選項,指定零值可禁用該選項。對於具有整數資料型別的選項,指定適當...