VBA Winsock API - keine UDP Antworten

Gast #3806592
Lesenswert?

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 #3806907
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren