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