Forum: PC-Programmierung VBA Winsock API - keine UDP Antworten


von Curby (Gast)


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

von Klaus W. (mfgkw)


Lesenswert?

Curby schrieb:
> ... mein Server auch tatsächlich die
> erwartete Textantwort sendet.

an welche IP-Adresse und welchen Port?

von Curby (Gast)


Lesenswert?

An die von meinem Clienten. Ich sende an 255.255.255.255:10102 die 
Nachricht und bekomme die antwort an 192.168.178.37:10102 (IP des 
Clienten).

von Curby (Gast)


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.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.