VBA Winsock API - keine UDP Antworten

Gast #3806592
Hallo alle,

ich verwende Access 2013, VBA, WInsock API.

Ich bastel grade ein Client - Server Suchprogramm. D.h. ich schicke 
einen UDP Broadcast und schaue, woher ich entsprechende Antworten 
bekomme.

Über Wireshark konnte ich ermitteln, dass meine UDP Nachricht vom Client 
an den Broadcast geschickt wird und mein Server auch tatsächlich die 
erwartete Textantwort sendet.

Jedoch erziele ich mit recvfrom keine Antworten. Ich habe den Socket an 
Adresse 0 gebunden, also INADDR_ANY.

Ich verbinde den Socket auf Port 10102 mit der Adresse 255.255.255.255 
und binde ihn auf 0, Port 10102.

WSA Initialisieren
1
    res = WSAStartup(&H202, WSA)
2
    If res = -1 Then
3
        MsgBox "Ein Fehler ist aufgetreten: " & WSAGetLastError, vbCritical, "Fehler"
4
        Exit Function
5
    End If

Socket erstellen
1
socketId = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)

Broadcast konfigurieren
1
Dim Broadcast As Long
2
        Broadcast = 1
3
        res = setsockopt(socketId, SOL_SOCKET, SO_BROADCAST, Broadcast, 1)

Socket binden
1
bind_addr.sin_family = AF_INET
2
        bind_addr.sin_port = htons(10102)
3
        bind_addr.sin_addr = htonl(0)
4
        bind_addr.sin_zero = String$(8, 0)
5
        res = bind(socketId, bind_addr, Len(bind_addr))

Socket verbinden
1
    I_SocketAddress.sin_family = AF_INET
2
    I_SocketAddress.sin_port = htons(10102)
3
    I_SocketAddress.sin_addr = inet_addr("255.255.255.255")
4
    I_SocketAddress.sin_zero = String$(8, 0)
5
    x = connect(socketId, I_SocketAddress, Len(I_SocketAddress))

Socket auf nicht-blockieren schalten
1
ioctlsocket socketId, FIONBIO, 1

Broadcast senden
1
count_it = send(socketId, ByVal strSend, Len(strSend), 0)

Nachricht empfangebn
1
Dim GotData As sockaddr_in
2

3
        count_it = recvfrom(socketId, ByVal strMessage, Len(strMessage), 0, GotData, Len(GotData))

Socket und WSA schließen
1
    x = closesocket(socketId)
2
        If x = SOCKET_ERROR Then
3
        MsgBox ("ERROR: closesocket = " + Str$(x))
4
        Exit Sub
5
    End If
6
    
7
    x = WSACleanup()

Ich hoffe wirklich, dass mich mal jemand aufkklären kann :(..

bis denne und vielen dank
Gast
Wireshark:

Senden:
"7","2.303202000","192.168.178.37","255.255.255.255","UDP","54","Source 
port: ezproxy-2  Destination port: ezproxy-2"

Antwort:
"10","2.378678000","192.168.178.110","192.168.178.37","UDP","55","Source 
port: ezproxy-2  Destination port: ezproxy-2"

Aber recvfrom hat 0 Bytes an Daten im Puffer.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.