none
socket問題,Server建立在DMZ內!! RRS feed

  • 問題

  • 我用socket寫了Server(local ip),但此台server建立在DMZ內(internet ip),
    然後我client在internet上,也只能設定連線到DMZ(internet ip),就...連不上。
    應該是因為我server socket是bind於local ip,所以連線進來,它也不接受?
    請問如果真得是這樣,如何解決,程式?或是DMZ設定?
    謝謝
    2011年9月29日 上午 03:43

解答

  • (1) 檢查你的Firewall 上對於DMZ的設定有沒有問題

    (2) 你的Server的閘道設定有無正確

    (3) 除非是某種要限定機器上只有某片網路卡可以接受連線的狀況, 否則

    Listener_Socket.Bind(new IPEndPoint(AddressAr[0], Port));

    改寫為

    Listener_Socket.Bind(new IPEndPoint(IPAddress.Any, Port));

    就行了.

    用IPAddress.Any的話, 以下這些應該也都不用寫了

        ServerHostName = Dns.GetHostName();
        IPHostEntry ipEntry = Dns.GetHostByName(ServerHostName);
        AddressAr = ipEntry.AddressList;

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 DM123456 2011年9月29日 上午 04:50
    2011年9月29日 上午 04:22
    版主

所有回覆

  • 如果 client 是在 Internet,該 Server 有 binding Internet IP 卻連不上,那就要檢查有沒有被防火牆擋,因為大多數的防火牆只開 port 80/443,如果你的 Server 用的不是這兩個 port 就要叫網管開 port,走 Local IP 也有相同的問題。
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure
    2011年9月29日 上午 03:56
    版主
  • 你的Server Socket 的部份, 程式碼怎麼寫的 ?

     

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年9月29日 上午 04:01
    版主
  • Server:
    內網ip:192.168.0.33
    DMZ ip:192.168.2.10
    Internet ip:211.130.10.10(假設)
    IPAddress[] AddressAr = null;
    String ServerHostName = "";
    try
    {
        ServerHostName = Dns.GetHostName();
        IPHostEntry ipEntry = Dns.GetHostByName(ServerHostName);
        AddressAr = ipEntry.AddressList;
    }
    catch (Exception) { }
    
    if (AddressAr == null || AddressAr.Length < 1)
    {
        return "Unable to get local address ... Error";
    }
    
    Listener_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Listener_Socket.Bind(new IPEndPoint(AddressAr[0], Port));
    
    Listener_Socket.Listen(-1);
    
    Listener_Socket.BeginAccept(new AsyncCallback(EndAccept), Listener_Socket);
    

    我的意思就是指,在變數AddressAr[]裡,就只有兩個ip(192.168.0.33,192.168.2.10),並沒有internet的,如此我在建立server時,會導致連線不到嗎
    2011年9月29日 上午 04:15
  • (1) 檢查你的Firewall 上對於DMZ的設定有沒有問題

    (2) 你的Server的閘道設定有無正確

    (3) 除非是某種要限定機器上只有某片網路卡可以接受連線的狀況, 否則

    Listener_Socket.Bind(new IPEndPoint(AddressAr[0], Port));

    改寫為

    Listener_Socket.Bind(new IPEndPoint(IPAddress.Any, Port));

    就行了.

    用IPAddress.Any的話, 以下這些應該也都不用寫了

        ServerHostName = Dns.GetHostName();
        IPHostEntry ipEntry = Dns.GetHostByName(ServerHostName);
        AddressAr = ipEntry.AddressList;

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 DM123456 2011年9月29日 上午 04:50
    2011年9月29日 上午 04:22
    版主
  • 我的Server是在DMZ指定的,我測過用internet ip(80 port)可以連到我的server(iis設定http連線)
    但我把使用我寫的程式(開port80停iis),然後client連internet ip,就連不上,所以我判定是否
    因為我寫的socket它所bind的ip為intranet ip而無法建立連線?
    而且其實DMZ我也不熟,我也只能叫網管設定,只是我要先搞清楚是我程式問題,還是DMZ設定有解?
    麻煩大大們幫忙了!!
    2011年9月29日 上午 04:25
  • 透過NAT的話,  你要Bind是機器上網卡的IP沒錯, 因為Firewall會處理轉送的問題.

    [實作同步 .NET Socket TCP《使用TcpClient與TcpListener類別》] 你可以先用這篇文的Sample測測看

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年9月29日 上午 04:33
    版主
  • 哇~~~~太感謝您呢,我真是手賤以為server端要指定ip才能連線。
    client是有連到server了,不過現在又卡在server所send過來的socket
    傳不過來...我再研究看看..是不是防火牆一類的問題
    2011年9月29日 上午 04:50