Winsock UDP Serverport einstellen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Langstein
Beiträge: 13
Registriert: 25.09.2008 18:29

Winsock UDP Serverport einstellen

Beitrag von Langstein »

Hallo zusammen,

Ich möchte mit folgendem Programm ein einfaches BACnet Telegramm als Broadcast über das Netzwerk schicken. Tut alles prima, nur bekomme ich nicht heraus, wie ich den UDP-Port der Source einstellen kann. Kann mir jemand helfen?

Der Server Source Code zählt immer um eines weiter.

Code: Alles auswählen

InitNetwork()

Procedure.l SendMagicPacket(client_ip.s="255.255.255.255")
  *SendePuffer = AllocateMemory(480)
  Protected Success.l=0
  Protected client_bip.l
  Protected client_port.l
  Protected client_bport.w
  Protected client_socket.l
  Protected socket_keepalive.b
  Protected server_mode.l

  RAW$ = "810B001501001000C4020000772201E091002201CA"

  i= 0 
  For K = 1 To Len(RAW$)-1 Step 2
    PokeB(*SendePuffer+i, Val("$"+Mid(RAW$,K,2)))
    i = i+1
  Next

  client_bip = inet_addr_(client_ip)
  client_port = 47808
  client_bport = htons_(client_port) ; convert to long
  client_socket = SOCKET_(#AF_INET, #SOCK_DGRAM, #IPPROTO_UDP) ; create the socket
  If client_socket
    socket_keepalive = 1
    If setsockopt_(client_socket, #SOL_SOCKET, #SO_BROADCAST, @socket_keepalive, 1) = 0
      sockaddr.SOCKADDR_IN
      client_sockaddr\sin_family = #AF_INET
      client_sockaddr\sin_port = client_bport
      client_sockaddr\sin_addr = client_bip
      server_mode = 0
      If ioctlsocket_(client_socket,#FIONBIO,@server_mode) = 0
        send.l = sendto_(client_socket, *SendePuffer, i, 0, @client_sockaddr, 16)
        If send=i And WSAGetLastError_()=0
        Debug "I-am packet send"
          Success=1
        EndIf
      EndIf
    EndIf

    closesocket_(client_socket)
  EndIf
  FreeMemory(*SendePuffer)
  ProcedureReturn Success
EndProcedure

SendMagicPacket()
Danke schon mal ...