Socket不能選擇本地IP連接問題如何解決
更新時(shí)間:2012年11月30日 15:16:29 作者:
本文將介紹一個(gè)不要手動(dòng),要用程序自動(dòng)實(shí)現(xiàn) ,可以綁定本地的任何IP地址,有需求的朋友可以參考下
現(xiàn)在碰到一個(gè)刺手的問題,是這樣的!
我的客戶端要通過socket與服務(wù)器端進(jìn)行通信,可是客戶端服務(wù)器上是雙ip地址(比方是192.168.1.10和192.168.1.20),可是 服務(wù)器端只允許192.168.1.20進(jìn)行通信,進(jìn)行了ip限制,在客戶端上192.168.1.10是主ip,192.168.1.20是從ip,如 果我簡單通過socket建立連接,程序默認(rèn)會(huì)以192.168.1.10進(jìn)行通信,這樣服務(wù)器端會(huì)拒絕,我應(yīng)該如果寫才能夠解決這個(gè)問題呢?
不要手動(dòng),要用程序自動(dòng)實(shí)現(xiàn) ,可以綁定本地的任何IP地址。
如本機(jī)IP地址為:
192.168.1.205,192.168.1.204,192.168.1.203
實(shí)現(xiàn)結(jié)果為:
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.205:2302 59.39.71.94:80 ESTABLISHED
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.203:12302 59.39.71.94:80 ESTABLISHED
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.204:7802 59.39.71.94:80 ESTABLISHED
方便的話給個(gè)代碼吧!謝謝!
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 string serverIp = "59.39.71.94";
int serverProt = 80;
string clientIp = "192.168.1.104";
int clientProt = 8012;
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var ipHostEntry = Dns.GetHostEntry(serverIp);
var ipEndPoint = new IPEndPoint(ipHostEntry.AddressList[0], serverProt);
var address = IPAddress.Parse(clientIp);
if (address != null)
{
var localEp = new IPEndPoint(address, clientProt);
socket.Bind(localEp);
}
socket.Connect(ipEndPoint); //建立長連接
以上代碼就可以完全實(shí)現(xiàn)上面的功能。
我的客戶端要通過socket與服務(wù)器端進(jìn)行通信,可是客戶端服務(wù)器上是雙ip地址(比方是192.168.1.10和192.168.1.20),可是 服務(wù)器端只允許192.168.1.20進(jìn)行通信,進(jìn)行了ip限制,在客戶端上192.168.1.10是主ip,192.168.1.20是從ip,如 果我簡單通過socket建立連接,程序默認(rèn)會(huì)以192.168.1.10進(jìn)行通信,這樣服務(wù)器端會(huì)拒絕,我應(yīng)該如果寫才能夠解決這個(gè)問題呢?
不要手動(dòng),要用程序自動(dòng)實(shí)現(xiàn) ,可以綁定本地的任何IP地址。
如本機(jī)IP地址為:
192.168.1.205,192.168.1.204,192.168.1.203
實(shí)現(xiàn)結(jié)果為:
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.205:2302 59.39.71.94:80 ESTABLISHED
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.203:12302 59.39.71.94:80 ESTABLISHED
C:\>netstat -an | find "59.39.71.94"
TCP 192.168.1.204:7802 59.39.71.94:80 ESTABLISHED
方便的話給個(gè)代碼吧!謝謝!
復(fù)制代碼 代碼如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 string serverIp = "59.39.71.94";
int serverProt = 80;
string clientIp = "192.168.1.104";
int clientProt = 8012;
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var ipHostEntry = Dns.GetHostEntry(serverIp);
var ipEndPoint = new IPEndPoint(ipHostEntry.AddressList[0], serverProt);
var address = IPAddress.Parse(clientIp);
if (address != null)
{
var localEp = new IPEndPoint(address, clientProt);
socket.Bind(localEp);
}
socket.Connect(ipEndPoint); //建立長連接
以上代碼就可以完全實(shí)現(xiàn)上面的功能。
相關(guān)文章
C#實(shí)現(xiàn)簡單的RSA非對(duì)稱加密算法示例
這篇文章主要介紹了C#實(shí)現(xiàn)簡單的RSA非對(duì)稱加密算法,結(jié)合實(shí)例形式分析了C#實(shí)現(xiàn)RSA加密的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-08-08C# 使用AspriseOCR.dll實(shí)現(xiàn)驗(yàn)證碼識(shí)別
這篇文章主要介紹了C# 使用AspriseOCR.dll實(shí)現(xiàn)驗(yàn)證碼識(shí)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03winform實(shí)現(xiàn)可拖動(dòng)的自定義Label控件
這篇文章主要為大家詳細(xì)介紹了winform實(shí)現(xiàn)可拖動(dòng)的自定義Label控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03C#學(xué)習(xí)基礎(chǔ)概念二十五問 11-15
C#學(xué)習(xí)基礎(chǔ)概念二十五問 11-15...2007-04-04C#基于正則表達(dá)式刪除字符串中數(shù)字或非數(shù)字的方法
這篇文章主要介紹了C#基于正則表達(dá)式刪除字符串中數(shù)字或非數(shù)字的方法,涉及C#針對(duì)數(shù)字的簡單正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-06-06