Seite 1 von 1

Winsock UDP Serverport einstellen

Verfasst: 01.01.2011 22:13
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 ...