07. juni 2001 - 12:09Der er
8 kommentarer og 1 løsning
IP og winsock
Jeg r ved at lave 1 prg som hele tiden viser mig hvad min IP r. Jeg bruger noget kode der ligner d her:
Private Sub Timer1_Timer() Text1 = Winsock1.LocalIP End Sub
Min IP er seføli 127.0.0.1 når jeg r offline, og når jeg så kobler på nettet skulle winsock1.localIP gerne skifte værdi men d gør den ikke... Den bliver ved med at sige 127.0.0.1 . Jeg skal stoppe mit program og så starte d igen før den winsock opdaterer sig.
Herbert localhost er ALTID 127.0.0.1 derfor skal du pinge maskinnavnet, hvis det skal virke.
Jeg har klippet lidt fra MSDN og rettet det til så du kan bruge timeren.
Lav et nyt exe projekt på formen placere du en timer med navnet timer1 og sætter nedenstående ind i kode vinduet, det virker når du er offline og skifter til online og får ny IP.
Bemærk resultat (IP og maskine navn) bliver skrevet ud til Immediate vinduet:
Private Type HOSTENT hName As Long hAliases As Long hAddrType As Integer hLength As Integer hAddrList As Long End Type
Private Type WSADATA wversion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte iMaxSockets As Integer iMaxUdpDg As Integer lpszVendorInfo As Long End Type
Private Declare Function WSAGetLastError Lib \"WSOCK32.DLL\" () As Long Private Declare Function WSAStartup Lib \"WSOCK32.DLL\" (ByVal _ wVersionRequired As Integer, lpWSAData As WSADATA) As Long Private Declare Function WSACleanup Lib \"WSOCK32.DLL\" () As Long
Private Declare Function gethostname Lib \"WSOCK32.DLL\" (ByVal hostname$, ByVal HostLen As Long) As Long Private Declare Function gethostbyname Lib \"WSOCK32.DLL\" (ByVal _ hostname$) As Long Private Declare Sub RtlMoveMemory Lib \"KERNEL32\" (hpvDest As Any, ByVal hpvSource&, ByVal cbCopy&)
Function hibyte(ByVal wParam As Integer)
hibyte = wParam \\ &H100 And &HFF&
End Function
Function lobyte(ByVal wParam As Integer)
lobyte = wParam And &HFF&
End Function
Sub SocketsInitialize() Dim WSAD As WSADATA Dim iReturn As Integer Dim sLowByte As String, sHighByte As String, sMsg As String
iReturn = WSAStartup(WS_VERSION_REQD, WSAD)
If iReturn <> 0 Then MsgBox \"Winsock.dll is not responding.\" End End If
If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = _ WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then
sHighByte = Trim$(Str$(hibyte(WSAD.wversion))) sLowByte = Trim$(Str$(lobyte(WSAD.wversion))) sMsg = \"Windows Sockets version \" & sLowByte & \".\" & sHighByte sMsg = sMsg & \" is not supported by winsock.dll \" MsgBox sMsg End End If
\'iMaxSockets is not used in winsock 2. So the following check is only \'necessary for winsock 1. If winsock 2 is requested, \'the following check can be skipped.
If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then sMsg = \"This application requires a minimum of \" sMsg = sMsg & Trim$(Str$(MIN_SOCKETS_REQD)) & \" supported sockets.\" MsgBox sMsg End End If
End Sub
Sub SocketsCleanup() Dim lReturn As Long
lReturn = WSACleanup()
If lReturn <> 0 Then MsgBox \"Socket error \" & Trim$(Str$(lReturn)) & \" occurred in Cleanup \" End End If
End Sub
Sub Form_Load()
SocketsInitialize
End Sub
Private Sub Form_Unload(Cancel As Integer)
SocketsCleanup
End Sub
Private Sub Timer1_Timer() Dim hostname As String * 256 Dim hostent_addr As Long Dim host As HOSTENT Dim hostip_addr As Long Dim temp_ip_address() As Byte Dim i As Integer Dim ip_address As String
If gethostname(hostname, 256) = SOCKET_ERROR Then MsgBox \"Windows Sockets error \" & Str(WSAGetLastError()) Exit Sub Else hostname = Trim$(hostname) End If
hostent_addr = gethostbyname(hostname)
If hostent_addr = 0 Then MsgBox \"Winsock.dll is not responding.\" Exit Sub End If
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.