vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Windows API
VBA Winsock, UDP Broadcast - Antwort des Servers wird nicht entgegengenommen 
Autor: Curby
Datum: 10.09.14 09:32

Hallo Leute,

ich probiere grademit den Winsock Api Funktionen unter Access 2013.

Ich suche einen Server, indem ich eine UDP Nachricht per UDP an 255.255.255.255 rausschicke. Über Wireshark kann ich sehen, dass die Nachricht rausgeht und auch die entsprechende Antwort vom Server tatsächlich gesendet wird. Der Socket, Winsock wird ordentlich geöffnet und geschlossen.

Allerdings kriege ich es nicht gebacken die Server antwort mit recv(from) auszulesen. Der Puffer ist bei recv und recvfrom immer leer. [u]Auf TCP Basis kann ich die Nachrichten mit unten stehender Funktion auslesen!

Mein Code sieht folgendermaßen aus:

Ausführender Code:
mmc_connect "255.255.255.255", True
Wait 100
send_c "HELLO MMC102"
Wait 100
mmc_disconnect
Verbindiung herstellen:
Sub mmc_connect(IP As String, udp As Boolean)
    Dim WSA As WSAData
    Dim I_SocketAddress As sockaddr_in
    Dim ipAddress As Long
    Dim bNonBlock As Long
    Dim bind_addr As sockaddr_in
 
    res = WSAStartup(&H202, WSA)
    If res = -1 Then
        MsgBox "Ein Fehler ist aufgetreten: " & WSAGetLastError, vbCritical, _
          "Fehler"
        Exit Sub
    End If
 
    'Create a new socket
    If udp = False Then
        socketId = socket(AF_INET, SOCK_STREAM, 0)
    Else
        socketId = socket(AF_INET, SOCK_DGRAM, 0)
    End If
    If socketId = SOCKET_ERROR Then
        MsgBox ("ERROR: socket = " + Str$(socketId))
        OpenSocket = COMMAND_ERROR
        Exit Sub
    End If
 
    If udp = True Then
        Dim value As Integer
        value = 1
        res = setsockopt(socketId, SOL_SOCKET, SO_BROADCAST, value, 1)
        If res = -1 Then
            MsgBox "Ein Fehler ist aufgetreten: " & WSAGetLastError, _
              vbCritical, "Fehler"
            Exit Sub
        End If
 
'        bind_addr.sin_family = AF_INET
'        bind_addr.sin_port = htons(10102)
'        bind_addr.sin_addr = inet_addr("192.168.178.110")
'        bind_addr.sin_zero = String$(8, 0)
'        res = bind(socketId, bind_addr, Len(bind_addr))
'        If res = -1 Then
'            MsgBox "Ein Fehler ist aufgetreten: " & WSAGetLastError, 
' vbCritical, "Fehler"
'            Exit Sub
'        End If
    End If
 
    'Open a connection to a server
    I_SocketAddress.sin_family = AF_INET
    I_SocketAddress.sin_port = htons(10102)
    I_SocketAddress.sin_addr = inet_addr(IP)
    I_SocketAddress.sin_zero = String$(8, 0)
    x = connect(socketId, I_SocketAddress, Len(I_SocketAddress))
    If socketId = SOCKET_ERROR Then
        MsgBox ("ERROR: connect = " + Str$(x))
        OpenSocket = COMMAND_ERROR
        Exit Sub
    End If
 
    'bNonBlock = 1;
    ioctlsocket socketId, FIONBIO, 1
 
    OpenSocket = socketId
End Sub
String senden:
Sub send_c(text As String)
    Dim strSend As String
    strSend = text
    count_it = send(socketId, ByVal strSend, Len(strSend), 0)
    If count_it = SOCKET_ERROR Then
        MsgBox ("ERROR: send = " + Str$(count_it))
        SendCommand = COMMAND_ERROR
        Exit Sub
    End If
    SendCommand = NO_ERROR
End Sub
Verbindung schließen:
Sub mmc_disconnect()
    x = closesocket(socketId)
        If x = SOCKET_ERROR Then
        MsgBox ("ERROR: closesocket = " + Str$(x))
        Exit Sub
    End If
 
    x = WSACleanup()
End Sub
Daten empfangen (recv statt recvfrom):
    Dim c As String * 1
    Dim dataBuf As String
    Dim length As Integer
    Dim I As Integer
 
    maxLength = 1000
 
    dataBuf = ""
    Do While length < maxLength
        count_it = recv(socketId, c, 1, 0)
        If count_it < 1 Then
            Exit Do
        End If
 
        length = length + count_it
        dataBuf = dataBuf + c
    Loop
 
    r_text = dataBuf
Wenn ihr mir das helfen könntet, wäre ich da sehr dankbar!

mfg
Nils

Beitrag wurde zuletzt am 10.09.14 um 09:34:10 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel