Socket不能選擇本地IP連接問題如何解決
更新時間:2012年11月30日 15:16:29 作者:
本文將介紹一個不要手動,要用程序自動實現(xiàn) ,可以綁定本地的任何IP地址,有需求的朋友可以參考下
現(xiàn)在碰到一個刺手的問題,是這樣的!
我的客戶端要通過socket與服務器端進行通信,可是客戶端服務器上是雙ip地址(比方是192.168.1.10和192.168.1.20),可是 服務器端只允許192.168.1.20進行通信,進行了ip限制,在客戶端上192.168.1.10是主ip,192.168.1.20是從ip,如 果我簡單通過socket建立連接,程序默認會以192.168.1.10進行通信,這樣服務器端會拒絕,我應該如果寫才能夠解決這個問題呢?
不要手動,要用程序自動實現(xiàn) ,可以綁定本地的任何IP地址。
如本機IP地址為:
192.168.1.205,192.168.1.204,192.168.1.203
實現(xiàn)結果為:
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
方便的話給個代碼吧!謝謝!
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); //建立長連接
以上代碼就可以完全實現(xiàn)上面的功能。
我的客戶端要通過socket與服務器端進行通信,可是客戶端服務器上是雙ip地址(比方是192.168.1.10和192.168.1.20),可是 服務器端只允許192.168.1.20進行通信,進行了ip限制,在客戶端上192.168.1.10是主ip,192.168.1.20是從ip,如 果我簡單通過socket建立連接,程序默認會以192.168.1.10進行通信,這樣服務器端會拒絕,我應該如果寫才能夠解決這個問題呢?
不要手動,要用程序自動實現(xiàn) ,可以綁定本地的任何IP地址。
如本機IP地址為:
192.168.1.205,192.168.1.204,192.168.1.203
實現(xiàn)結果為:
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
方便的話給個代碼吧!謝謝!
復制代碼 代碼如下:
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); //建立長連接
以上代碼就可以完全實現(xiàn)上面的功能。
相關文章
利用Distinct()內置方法對List集合的去重問題詳解
這篇文章主要給大家介紹了關于利用Distinct()內置方法對List集合的去重問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06
使用VS2010 C#開發(fā)ActiveX控件(下),完整代碼打包下載
我們介紹了開發(fā)、打包、發(fā)布、使用ActiveX控件的全過程。在演示程序中,我們沒有調用串口通信和讀卡器Dll程序,由于我們讀卡器的原始Dll是使用其它語言進行開發(fā)的,對C#來說,是非托管代碼,因此我們還需要在代碼級別進行非托管代碼的安全性設置2011-05-05
C++聯(lián)合體轉換成C#結構的實現(xiàn)方法
這篇文章主要介紹了C++聯(lián)合體轉換成C#結構的實現(xiàn)方法,需要的朋友可以參考下2014-08-08
C#中一個高性能異步socket封裝庫的實現(xiàn)思路分享
下面小編就為大家分享一篇C#中一個高性能異步socket封裝庫的實現(xiàn)思路,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11

