Seite 1 von 2

OpenNetworkConnectionUDP()

Verfasst: 16.10.2005 19:19
von MLK
nach erfolgreichem aufruf, lassen sich per SendNetworkData/Sting() per UDP daten verschicken.


(firewall anmachen, um zu sehen, dass da was ankommt)

Code: Alles auswählen

Procedure OpenNetworkConnectionUDP(ServerName$, Port.l)
  !Conn equ Esp+8
  !Wsa  equ Esp+24
  !Sock equ Esp+424
  
  WsaData.WSADATA
  Connection.SOCKADDR_IN
  Sock.l
    
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  !if ~ defined _gethostbyname@4 | defined @f
  !extrn _gethostbyname@4 
  !@@:
  !end if
  ;
  !if ~ defined _WSAStartup@8 | defined @f
  !extrn _WSAStartup@8
  !@@:
  !end if
  ;
  !if ~ defined _socket@12 | defined @f
  !extrn _socket@12
  !@@:
  !end if
  ;
  !if ~ defined _htons@4 | defined @f
  !extrn _htons@4
  !@@:
  !end if
  ;
  !if ~ defined _connect@12 | defined @f
  !extrn _connect@12
  !@@:
  !end if
  ;
  !if ~ defined _WSACleanup@0 | defined @f
  !extrn _WSACleanup@0
  !@@:
  !end if
  
  ;;;;;;;;;;;;;;;;;;
  !MOV    Eax, [Esp]
  !OR     Eax, Eax
  !JZ     @f
  !PUSH   Eax
  !CALL   _gethostbyname@4 
  !OR     Eax, Eax
  !JZ     @f
  !MOVSX  Ebx, word [Eax+8]
  !CMP    Ebx, 2
  !JNE    @f
  !MOV    Ecx, [Eax+12]
  !MOV    Ecx, [Ecx]
  !MOV    Ecx, [Ecx]  
  !MOV    [Conn+4], Ecx  
  !LEA    Eax, [Wsa]
  !PUSH   Eax
  !PUSH   $0002
  !CALL   _WSAStartup@8
  !OR     Eax, Eax
  !JNZ    @f  
  !CMP    byte [Wsa], 2
  !JL     @f
  !PUSH   0
  !PUSH   2
  !PUSH   2
  !CALL   _socket@12
  !CMP    Eax, -1
  !JE     @f    
  !MOV    [Sock], Eax
  !MOV    word [Conn], 2
  !PUSH   dword [Esp+4]
  !CALL   _htons@4
  !MOV    word [Conn+2], ax
  !MOV    Eax, dword [Sock]
  !PUSH   dword 16
  !LEA    Eax, [Conn+4]
  !PUSH   Eax
  !PUSH   dword [Sock+8]
  !CALL   _connect@12
  !CALL   _WSACleanup@0
  !MOV    Eax, [Sock]
  ProcedureReturn
  !@@:
  !CMP    byte [Wsa], 0
  !JE     @f
  !CALL   _WSACleanup@0
  !@@:
  
  ;;;;;;;;;;;;;
  !Restore Conn
  !Restore Wsa
  !Restore Sock
EndProcedure


InitNetwork()

ServerID = OpenNetworkConnectionUDP("localhost", 777)
If ServerID
  Debug SendNetworkString(ServerID, "test")  
  Debug SendNetworkData(ServerID, AllocateMemory(7), 7)
  CloseNetworkConnection(ServerID)
EndIf
man nimmt zwar besser die UDP-Lib auf purearea, aber ich wollte es mal zeigen, da ich überrascht bin dass es funktioniert.

Verfasst: 16.10.2005 21:05
von Lukaso
Hallo,

ich hätte mal ne Frage: Funktioniert das auch unter Linux? Ich benutze momentan die UDP Lib, allerdings ärgere ich mich, dass das nicht unter Linux funktioniert.

Super Arbeit :allright:

Lukas

Verfasst: 16.10.2005 22:27
von MLK
das wird auf linux nicht laufen, da es - genau wie die UDP-Lib - auf windows sockets (winapi) basiert. es gibt aber halt auch die linux sockets, die in etwa gleich benutzt werden. kannst ja mal versuchen dich da einzuarbeiten.

Verfasst: 16.10.2005 23:37
von Danilo
@MLK:
Ich frage mich schon seit ein paar Tagen warum Du das alles
mit ASM machst. Ich finde das irgendwie überflüssig - da kannst
Du ja gleich komplett mit ASM coden.
In PB wären das nur wenige Zeilen, wozu also die Arbeit machen,
so daß es einige Leute hier dann nicht lesen können?

Ich denke man sollte da schon den Nutzen abwägen, und
der ist hier Null, wenn diese Prozedur vielleicht 0.001ms
schneller läuft als mit PB-Code (die Hauptzeit geht eh bei
den API-Aufrufen drauf).

Würde mich mal interessieren was der Grund dafür ist.

Verfasst: 16.10.2005 23:51
von Deeem2031
Kannst du das an der Zeile "!Sock equ Esp+424" nicht schon erkennen? Er will den ahnungslosen PBlern, die das benutzen wollen, versteckte Bugs einbauen, damit sie bis ans Ende ihrer Tage nach dem Bug suchen und keine konkurenz für MLK mehr darstellen. Eigentlich keine schlechte Idee, sollte ich auch mal versuchen :mrgreen:

Verfasst: 17.10.2005 00:13
von MLK
ich habe die asm sachen bisher alle erst in pb gemacht und dann der herausforderung wegen in asm. da ich stolz auf meine ersten asm codes bin, poste ich sie natürlich. wäre wohl nicht schlecht, wenn ich in zukunft einfach beides posten würde.

Verfasst: 17.10.2005 00:22
von MLK
Deeem2031 hat geschrieben:Kannst du das an der Zeile "!Sock equ Esp+424" nicht schon erkennen? Er will den ahnungslosen PBlern, die das benutzen wollen, versteckte Bugs einbauen, damit sie bis ans Ende ihrer Tage nach dem Bug suchen und keine konkurenz für MLK mehr darstellen. Eigentlich keine schlechte Idee, sollte ich auch mal versuchen :mrgreen:
ich warte bei jedem asm code den ich bisher postete, darauf dass ihn wer überprüft und mich auf eventuelle fehler bzw verbesserungen hinweist. siehe meinen kommentar zu meinem code hier. du bist einer der hauptkandidaten auf die ich zählte und kommst mir jetzt so, vielen dank! solltest dir an die eigene nase fassen, wenn du anstatt einer korrektur, nur einen blöden hochnäsigen kommentar über hast, aber mir vorwirfst die pb-user mit bugs sitzen zu lassen.

und wo da der fehler ist, sehe ich nicht, da die struktur WSADATA 400 Bytes groß ist.

Verfasst: 17.10.2005 01:02
von Laurin
Du brauchst wegen Deeem und Danilo nicht beleidigt zu sein.
Deeem hat nen :mrgreen: an seinen Text gehangen, er meint es also nicht so ernst. Und Danilo... ja, sag wir einfach mal, er ist halt so (soll jetzt nicht negativ gemeint sein @Danilo).

Verfasst: 17.10.2005 03:03
von Danilo
MLK hat geschrieben:ich habe die asm sachen bisher alle erst in pb gemacht und
dann der herausforderung wegen in asm. da ich stolz auf
meine ersten asm codes bin, poste ich sie natürlich.
Dagegen gibt es natürlich nichts einzuwenden - weiter so!
MLK hat geschrieben:wäre wohl nicht schlecht, wenn ich in zukunft einfach beides
posten würde.
Ich denke das ist eine gute Idee. Dann können wahrscheinlich einfach
mehr Leute den Code verstehen und somit auch einsetzen.

Wer einen Code nicht versteht, der wird ihn auch nicht blind
einsetzen und darauf vertrauen das alles gut geht.
Wenn sich bei der Code-Generierung von PB intern etwas verändert,
z.B. beim Sichern von Registern etc., dann stimmen die Stackoffsets
so nicht mehr, und das Programm reagiert undefiniert.
Das kann dann ein sehr schwer zu findender Bug sein, in einem
größeren Projekt.


Und reg' Dich nicht wegen Deeem auf - ich halte seine Library-Hacks
für schlimmer. Die kann auch niemand einsetzen, da man damit
keine Garantie mehr hat das PB ordentlich läuft. Könnten ja
Bugs drin sein - womit man gegenüber Fantaisie Software
jeden Anspruch auf ein korrekt laufendes PureBasic verliert.

FS kann ja nur für ein unverändertes PureBasic Support geben,
und nicht für solche Hacks, wo die Grundlibraries von PB durch
fremde Libs ersetzt werden. Wenn Du in Deinem Auto einfach
den Motor austauschst, weil ein anderer Hersteller meint sein
Motor läuft schneller, dann ist die Garantie für das Auto komplett
erloschen - schließlich könnte das ganze Ding einfach explodieren.

Als nächstes wird der Compiler von PB-Usern hier auch noch
ersetzt oder gepatcht, da bin ich mir schon fast sicher. ;)
Laurin hat geschrieben:Und Danilo... ja, sag wir einfach mal, er ist halt so
(soll jetzt nicht negativ gemeint sein @Danilo).
Ja, der dumme Danilo ist einfach so. Wenn er für etwas keinen
Grund sieht oder es nicht versteht, dann fragt er einfach nach.
Eine Frechheit, was dieser Kerl sich da rausnimmt... ;)

Verfasst: 17.10.2005 03:14
von Laurin
Danilo hat geschrieben:
Laurin hat geschrieben:Und Danilo... ja, sag wir einfach mal, er ist halt so
(soll jetzt nicht negativ gemeint sein @Danilo).
Ja, der dumme Danilo ist einfach so. Wenn er für etwas keinen
Grund sieht oder es nicht versteht, dann fragt er einfach nach.
Eine Frechheit, was dieser Kerl sich da rausnimmt... ;)
Dumm bist du nicht, ich halte dich auch nicht dafür (du hast ja schon oft gezeigt, was du kannst).
Dein ;) zeigt mir, dass du es locker nimmst. Die Welt ist schön :mrgreen:

Das müssen wir aber nicht weiter auswelzen, ich denke, das hatten wir schon zur Genüge.