簡體   English   中英

在WinSock2,C ++中的漫游器后面連接到服務器

[英]Connection to server while behind the rounter in WinSock2, C++

我正在使用WinSocks用C ++編寫一個非常簡單的服務器-客戶端應用程序。

當我將客戶端的參數設置為:服務器IP的resolveHost ("google.pl")和端口80 ,我收到一個html(帶有GET標頭)。

當我首先運行服務器(使用端口10000 ),然后運行客戶端(端口10000 IP inet_addr("127.0.0.1")似乎可以工作(我收到了一些東西)。

但是,當我將客戶端中的服務器IP更改為inet_addr("188.246.158.171") (目前我的IP,我沒有靜態IP,我已經通過某個網站檢查了我的實際IP)時,肯定不能正常工作。

我的電腦在路由器后面- 可能是問題嗎?

如果是這樣,我能以不向路由器退回任何配置 (端口轉發等)的方式解決該問題。 另外,我不想制作任何特定於路由器的型號,因此我故意沒有發布路由器的型號;)

為什么我不想更改配置? 因為我的應用程序將用於“簡單的人”。 簡單的人不會嘗試進行配置,我也不會要求他們這樣做。 同樣,許多應用程序(例如,在線游戲)在沒有任何配置的情況下也可以與路由器正常工作-我的應用程序不能例外(以計算機上其他應用程序的示例為例,我知道實現它的可能性和普遍性)。


我使用Visual Studio 2012,可在Windows 7 x64上運行。

如果要在路由器后面運行偵聽服務器,則希望外部客戶端通過路由器訪問服務器時, 必須在路由器上配置端口轉發規則。 你無法避免。 但是,如果路由器支持uPnP(通用即插即用),則您的服務器代碼可以以可編程方式配置端口轉發規則,例如使用Microsoft的IUPnPNAT接口。 否則,您必須使用路由器自己的配置軟件(通常在路由器本身上運行的HTTP接口)。

您還必須在本地防火牆(如果已安裝)上配置端口/權限。 一些防火牆具有用於此目的的API,例如Microsoft的Firewall

在線游戲和其他對等應用程序采用了幾種NAT遍歷技術來避開NAT,防火牆等。打孔,角色反轉等。進行一些搜索后,即可輕松獲得信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM