Seite 1 von 1

Frage Netzwerk UDP erweitert Linux neu

Verfasst: 25.09.2009 23:05
von Joshua314
Hallo Leute,

ich habe folgendes Problem. Mit Wireshark hab ich festgestellt, dass PB bei einer Verbindung unter UDP den Source Port
frei wählt. Der Destinations Port kann man ja angeben. Das klappt ja auch.
Nur wie gesagt der Source Port wird frei gewählt. Meine Ziel Applikation prüft aber den Source Port. Und da kommt mein Problem eben.

Jemand eine Idee ????

Gruß Thomas

Code: Alles auswählen

zelle.b = 0 

*mem = AllocateMemory(1000)




If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

zweite = OpenNetworkConnection("192.68.20.60",98,#PB_Network_UDP)


Restore Daten

For i = 0 To 16
Debug i
Read.b zelle

dummy.l = zelle &255
dummy = dummy / 2
Debug Chr(dummy)
;Debug zelle & 255
PokeB(*mem+i , zelle&255)
Next I
 

  ;While 1= 1
   If Zweite
    senden = SendNetworkData(zweite, *mem, 17)
    Debug senden
    Delay(200)
   EndIf
  ;Wend
 
End 

DataSection
Daten: 



Data.b $88,$8E,$6A,$9A,$A0,$A2,$E0,$88,$8E,$6A,$9a,$A0,$A2,$63,$3F,$BC,$21




Re: Frage Netzwerk UDP

Verfasst: 26.09.2009 09:20
von DarkDragon
Ich hab gelesen, dass man zusätzlich bind verwenden kann auf dem Socket, also so:

Code: Alles auswählen

zelle.b = 0

*mem = AllocateMemory(1000)

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

zweite = OpenNetworkConnection("192.68.20.60",98,#PB_Network_UDP)

; Setze nun den Source-Port:
socket = ConnectionID(zweite)
If socket
  sockaddr.SOCKADDR_IN
  
  sockaddr\sin_family = #AF_INET
  sockaddr\sin_port   = htons_(98)
  sockaddr\sin_addr   = #INADDR_ANY
  
  bind_(socket, @sockaddr, SizeOf(SOCKADDR_IN))
EndIf

Restore Daten

For i = 0 To 16
  Debug i
  Read.b zelle
  
  dummy.l = zelle &255
  dummy = dummy / 2
  Debug Chr(dummy)
  PokeB(*mem+i , zelle&255)
Next i

If Zweite
  senden = SendNetworkData(zweite, *mem, 17)
  Debug senden
  Delay(200)
EndIf
End

DataSection
Daten:
Data.b $88,$8E,$6A,$9A,$A0,$A2,$E0,$88,$8E,$6A,$9a,$A0,$A2,$63,$3F,$BC,$21
Allerdings geht das ja nur im lokalen Netzwerk und du weißt nicht was die Netzwerkinterfaces zwischen Netzwerken daraus machen. Bzw. man kann es nur raten.

Re: Frage Netzwerk UDP

Verfasst: 26.09.2009 21:17
von Joshua314
Hallo Dark Dragon,

klappt...... meine Anwendung reagiert darauf........

kannst du mir einen gefallen machen ???
Kannst du mir Bitte deine Zeilen etwas kommentieren .......???

Wo ich finde ich die Beschreibung von Bind_ ????

Gruß Thomas

Re: Frage Netzwerk UDP

Verfasst: 27.09.2009 08:19
von DarkDragon
Joshua314 hat geschrieben:Hallo Dark Dragon,

klappt...... meine Anwendung reagiert darauf........

kannst du mir einen gefallen machen ???
Kannst du mir Bitte deine Zeilen etwas kommentieren .......???

Wo ich finde ich die Beschreibung von Bind_ ????

Gruß Thomas
Eine Beschreibung von bind_ findest du im msdn:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Zusätzlich hier noch htons_:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Hier mal mein Teil für die Erklärung:

Code: Alles auswählen

socket = ConnectionID(zweite) ; Hole das Systemhandle (Socket) von der PureBasic Verbindung
If socket ; Wenn das handle in Ordnung ist
  ; Bind will ein SOCKADDR/SOCKADDR_IN als parameter.
  sockaddr.SOCKADDR_IN
 
  sockaddr\sin_family = #AF_INET ; Setze die Adressfamilie
  sockaddr\sin_port   = htons_(98) ; Setze den Port auf dem Empfangen wird und konvertiere ihn in network-byte-order.
  sockaddr\sin_addr   = #INADDR_ANY ; Es soll egal sein, welche IP man hat
  
  ; Da bind zwischen SOCKADDR und SOCKADDR_IN unterscheiden muss, übergebe die größe der verwendeten Struktur
  ; Danach ist der sourceport festgelegt.
  bind_(socket, @sockaddr, SizeOf(SOCKADDR_IN))
EndIf

Re: Frage Netzwerk UDP

Verfasst: 27.09.2009 22:55
von Joshua314
danke.....

Gruß Thomas

Erweitert !!! Frage Netzwerk UDP erweitert Linux (neu)

Verfasst: 28.02.2011 11:53
von Joshua314
Hallo Leute
Darc Dragon hat mir damals auf Windows geholfen.
Das funktioniert super.....
Nun meine Frage .... Wie kann ich dies bei Linux machen ?????

Ich müsste diese Anwendung jetzt auf Linux bringen ...


Gruß Thomas