24-04-2009, 01:33 AM
So, I just wrote up my own fine ass function for getting your actual IP. At first it was just 1 line of code, and I'm sure you've seen code using INet before to get your actual IP...but none like this, good sir!
First, open your server:
In modGlobals, add this:
Then in Sub UpdateCaption, replace the:
With:
Then in InitServer (before the final SetStatus message) add this:
What I did with the IP_Source is basically let you choose between using whatismyip.com or whatismyip.org (sometimes one's down). Either make IP_Source = "com" or "org". In my engine I have this load from an INI file...but doing an INI file is a totally different tutorial.
Then go to Project > Components. Look for Microsoft Internet Transfer Control 6.0 and check it and click OK.
Now open frmServer and add the INet control anywhere you want and make sure it's named: INet. Then click on your new INet control and in the properties box make sure Index is set to 0 (it's blank by default).
And...here's the magic itself. Add this to modGeneral (or any other module is fine):
[code]''''''''''''''''''''''''''''''''''''''''''''
' Function written from scratch by: GIAKEN '
''''''''''''''''''''''''''''''''''''''''''''
Public Function GetActualServerIP() As String
Dim RetryValue As Long
Load frmServer.INet(1)
Retry:
'after 2 seconds time the request out
frmServer.INet(RetryValue).RequestTimeout = 2
Select Case IP_Source
Case "org"
Call SetStatus("Retrieving actual IP from whatismyip.org...")
On Error Resume Next
GetActualServerIP = frmServer.INet(RetryValue).OpenURL("http://whatismyip.org", icString)
On Error GoTo ErrHandler
Case "com"
Call SetStatus("Retrieving actual IP from whatismyip.com...")
On Error Resume Next
GetActualServerIP = frmServer.INet(RetryValue).OpenURL("http://whatismyip.com/automation/n09230945.asp", icString)
On Error GoTo ErrHandler
End Select
'if the IP is blank, then handle it as an error
If LenB(GetActualServerIP) = 0 Then GoTo ErrHandler
Call SetStatus("Successfully retrieved actual IP.")
Exit Function
ErrHandler:
'clear the RTE error just in case so we can properly continue
Err.Clear
Call SetStatus("Failed to retrieve actual IP address: timed out.")
frmServer.INet(RetryValue).Cancel
RetryValue = RetryValue + 1
If RetryValue
First, open your server:
In modGlobals, add this:
Code:
Public ACTUAL_IP As String
Public IP_Source As String
Then in Sub UpdateCaption, replace the:
Code:
frmServer.Socket(0).LocalIP
With:
Code:
ACTUAL_IP
Then in InitServer (before the final SetStatus message) add this:
Code:
IP_Source = "org"
ACTUAL_IP = GetActualServerIP
What I did with the IP_Source is basically let you choose between using whatismyip.com or whatismyip.org (sometimes one's down). Either make IP_Source = "com" or "org". In my engine I have this load from an INI file...but doing an INI file is a totally different tutorial.
Then go to Project > Components. Look for Microsoft Internet Transfer Control 6.0 and check it and click OK.
Now open frmServer and add the INet control anywhere you want and make sure it's named: INet. Then click on your new INet control and in the properties box make sure Index is set to 0 (it's blank by default).
And...here's the magic itself. Add this to modGeneral (or any other module is fine):
[code]''''''''''''''''''''''''''''''''''''''''''''
' Function written from scratch by: GIAKEN '
''''''''''''''''''''''''''''''''''''''''''''
Public Function GetActualServerIP() As String
Dim RetryValue As Long
Load frmServer.INet(1)
Retry:
'after 2 seconds time the request out
frmServer.INet(RetryValue).RequestTimeout = 2
Select Case IP_Source
Case "org"
Call SetStatus("Retrieving actual IP from whatismyip.org...")
On Error Resume Next
GetActualServerIP = frmServer.INet(RetryValue).OpenURL("http://whatismyip.org", icString)
On Error GoTo ErrHandler
Case "com"
Call SetStatus("Retrieving actual IP from whatismyip.com...")
On Error Resume Next
GetActualServerIP = frmServer.INet(RetryValue).OpenURL("http://whatismyip.com/automation/n09230945.asp", icString)
On Error GoTo ErrHandler
End Select
'if the IP is blank, then handle it as an error
If LenB(GetActualServerIP) = 0 Then GoTo ErrHandler
Call SetStatus("Successfully retrieved actual IP.")
Exit Function
ErrHandler:
'clear the RTE error just in case so we can properly continue
Err.Clear
Call SetStatus("Failed to retrieve actual IP address: timed out.")
frmServer.INet(RetryValue).Cancel
RetryValue = RetryValue + 1
If RetryValue