Code für einen UDP-Chat

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Smokie

Betreff: Code für einen UDP-Chat

BeitragMi, Okt 26, 2005 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich hatte mal vor langem einen Chat mit BB geproggt, da es mir nix nützt habe ich mit gedacht ich stelle den Code hier rein. Sollte funktionieren ist zum Teil etwas unübersichtlig aber geht Smile

Code: [AUSKLAPPEN]

;Wiedermal ein Chat
Graphics 640,480,16,2
SetBuffer BackBuffer()

AppTitle "Mapa-Chat-Attack"
;Variablen etc.

Type player

   Field name$
   Field ip$
   Field id
   Field port
   Field timeout

End Type

Type zeile

   Field zeilentxt$
   Field zeilenpos

End Type

stdfont=LoadFont("Arial",14,0,0,0)

Global Stream
Global TxT$
Global zeilex=385
Global i=0
Global okay=1
Global deinname$="Noname"
Global deineid
Global counter      ;Zählt die geschriebenen Chatmsg
Global maxzeilen=27 ;Die Anzahl der Maximal an zu zeigenden Zeilen
Global zeit$,time
Global Timeout=10000   ;Millisecs bis der client aufhört zu versuchen dem Server beizutreten
Global Playerzahl=1
Global server=0
Global internetip$
Global ip,clientid,serverip$
Global ipneu
Global absenderport
Global woeter=47


Dim eingabezeichen$(5)
Dim chatzeilen$(28)
Dim wort$(woeter)

wort$(0)="gg"
wort$(1)="Good Game"
wort$(2)="lol"
wort$(3)="Laughing out Loud"
wort$(4)="cu"
wort$(5)="See you"
wort$(6)="brb"
wort$(7)="Be right back"
wort$(8)="n1"
wort$(9)="Nice one"
wort$(10)="arschloch"
wort$(11)="*Zensiert*"
wort$(12)="wixer"
wort$(13)="*Zensiert*"
wort$(14)="depp"
wort$(15)="*Zensiert*"
wort$(16)="arsch"
wort$(17)="*Zensiert*"
wort$(18)="hurensohn"
wort$(19)="*Zensiert*"
wort$(20)="blödman"
wort$(21)="*Zensiert*"
wort$(22)="/a"
wort$(23)="^^"
wort$(24)="depp"
wort$(25)="*Zensiert*"
wort$(26)="hure"
wort$(27)="*Zensiert*"
wort$(28)="wixer"
wort$(29)="*Zensiert*"
wort$(30)="scheiße"
wort$(31)="*Zensiert*"
wort$(32)="fuck"
wort$(33)="*Zensiert*"
wort$(34)="hurenbock"
wort$(35)="*Zensiert*"
wort$(36)="mofo"
wort$(37)="*Zensiert*"
wort$(38)="mofo"
wort$(39)="*Zensiert*"
wort$(40)="rofl"
wort$(41)="rowling on the floor laughing"
wort$(42)="fickne"
wort$(43)="*zensur*"
wort$(44)="ficken"
wort$(45)="*zensur*"
wort$(46)="scheisse"
wort$(47)="*zensur*"


.start
;Hier wird der Modus (Host oder Client) abgefragt.
SetFont stdfont

Color 0,140,255         ;MPPP-Standart Color

Print "Mapa-Chat-Attack"
Print "Ein Projekt von www.mapa-plasma.de.tp"
Print " "

Color 200,175,60      ;Fragen Color

Print " "
Print " "
Print "Was wollen Sie machen?"
Print "(H)osten"
Print "(J)oinen"
Print "(V)erlassen"

Repeat

If KeyHit(35) Then Gosub hosten  Exit
If KeyHit(36) Then Gosub joinen   Exit
If KeyHit(47) Or KeyHit(1) Then End

Forever


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Hosten


.hosten
Server=1
deineid=1
Stream=CreateUDPStream(2000)

If Not Stream <> 0 Then      ;Wenn der Stream nicht erstellt werden konnte...

   Color 255,0,0      ;Fehlermeldungs-Frabe

   Print "_____________________________________________________________________"
   Print ""
   Print "UDP-Stream konnte nicht erstellt werden stellen Sie sicher, dass"
   Print "Sie den Port 2000 im Router und in der Firewall freigeschaltet haben."
   Print "Taste drücken um es noch einmal zu versuchen."
   Print "_____________________________________________________________________"
   Print ""
   WaitKey()
   Goto start

EndIf


Color 0,255,0         ;Alles im [Grünen] Bereich

;Wenn der Stream erstellt werden konnte..

Print "_____________________________________________________________________"
Print ""

Print "Der UDP-Stream wurde erstellt und auf Mapa-Plasma angemeldet!"

erstellmin$=Mid$(CurrentTime(),4,2)
tcp=OpenTCPStream("http://mapaplasman.ma.funpic.de",80)

If Not tcp Print "Fehlgeschlagen": WaitKey: End

WriteLine tcp,"GET http://mapaplasman.ma.funpic.de/Chat_datein/ip.php"
WriteLine tcp,Chr$(10)
While Not Eof(tcp)

internetip$=ReadLine$( tcp )
Print "Ihrer IP-Adresse ist: "  + internetip$
Print "Drücken Sie eine Taste um fortzufahren."
Wend
CloseTCPStream tcp
Print "_____________________________________________________________________"
;Bei der HP anmelden
tcp=OpenTCPStream("http://mapaplasman.ma.funpic.de",80)
If Not tcp Print "Fehlgeschlagen": WaitKey: End
WriteLine tcp,"GET http://mapaplasman.ma.funpic.de/Chat_datein/script.php?name=" + deinname$ + "&min=" + erstellmin$ + "&ip=" + internetip$ + "&pw=*****&user=mapaplasman"
WriteLine tcp,Chr$(10)
If Eof(tcp) Print "Fehlgeschlagen.": WaitKey: End
While Not Eof(tcp)
Print ReadLine$( tcp )
Wend
CloseTCPStream tcp

   Color 200,175,60
   FlushKeys()
   Print " "
eingabename$=Input$("Geben Sie einen gewünschten Nicknamen an: ")
   If eingabename$="" Then Name$="NoName"
   deinname$=eingabename$
If create_player(0,eingabename$,ipint(internetip),1,2000) = 1 Then

   Color 0,255,0         ;Alles im [Grünen] Bereich
   Print "_____________________________________________________________________"
   Print " "
   Print "Der Spieler wurde registriert!"
   Print "Drücken Sie eine Taste um zu chatten"
   Print "_____________________________________________________________________"
   WaitKey()
   Goto Schleife

Else

   Color 255,0,0         ;Fehler
   Print "_____________________________________________________________________"
   Print " "
   Print "Der Spieler konnte nicht erstellt werden!"
   Print "Drücken Sie eine Taste um es noch einmal zu versuchen."
   Print "_____________________________________________________________________"
   CloseUDPStream Stream
   WaitKey()
   Print " "
   Print " "
   Goto start

EndIf
;----------------------------------------------------




.joinen
server=0
FlushKeys()
Color 0,255,0
Print " "
Print "_____________________________________________________________________"
Print " "

Color 200,175,60

serverip$=Input("Geben Sie die IP-Adresse des Servers an(Nichts eingeben um Lokal zu testen): ")
If serverip$="" Then serverip$="127.0.0.1"
deinname$=Input("Geben Sie einen Nicknamen an: ")
Print "Anmelden..."
Stream=CreateUDPStream(2001)

If Not Stream <> 0 Then      ;Wenn der Stream nicht erstellt werden konnte...

   Color 255,0,0      ;Fehlermeldungs-Frabe

   Print "_____________________________________________________________________"
   Print ""
   Print "UDP-Stream konnte nicht erstellt werden stellen Sie sicher, dass"
   Print "Sie den Port 2000 im Router und in der Firewall freigeschaltet haben."
   Print "Taste drücken um es noch einmal zu versuchen."
   Print "_____________________________________________________________________"
   Print ""
   WaitKey()
   Goto start

EndIf

Print "Joining..."
Print "Timeout nach 10 Sekunden"
WriteByte Stream,0
WriteLine Stream,deinname$

SendUDPMsg Stream,ipint(serverip$),2000

;Auf Antwort warten
timer=MilliSecs()
Repeat

   If MilliSecs()-timer > timeout Then   ;Timeout?!
      Color 255,0,0
      Print "_____________________________________________________________________"                     ;
      Print "Die Anmedlung ist fehlgeschlagen! Timeout!"
      Print "Drücken Sie eine Taste um es nocheinmal zu versuchen."
      Print "_____________________________________________________________________"
      CloseUDPStream Stream               ;
      WaitKey()                        ;
      Goto start                        ;
   EndIf

   If RecvUDPMsg(Stream) Then   ;Wenn man eine Antwort bekommen hat
      If ReadByte(Stream)=1 Then   ;Wenn die Daten des Clienten kommen

         bekommeneid=ReadByte(Stream)
         ip=ReadLine(stream)
         create_player(0,deinname$,ip,bekommeneid,2001)

         deineid=bekommeneid

      EndIf



         Color 0,255,0         ;Alles im [Grünen] Bereich
   Print "_____________________________________________________________________"
   Print " "
   Print "Der Spieler wurde registriert!"
   Print "Um den Chat zu starten drücken Sie eine Taste."
   Print "_____________________________________________________________________"
   WaitKey()
   Goto Schleife

   EndIf



Forever
time=MilliSecs()
;Hier ist die Runtime
.schleife
Repeat
Cls

zeit$=LSet(CurrentTime(),5)

ClsColor 0,140,255

eingabe()
zeigeuser()
If server=1 Then

   get_msg_server()

ElseIf server=0 Then

   get_msg_client()

EndIf

For z.zeile= Each zeile

   Text 5,z\zeilenpos,z\zeilentxt$

Next

Flip
Until KeyHit(1)
CloseUDPStream Stream
End

;;;;;;;;;;;;;;;;;;;;;;;;;;;;FUNCTIONS

Function ipfunktion$(inte=0)
                                          ;-> Eigene IP angeben als String oder Integer
   Local ips, ip, ipstr$                                    ;
   ips=CountHostIPs("")                                    ;
   If Not ips Then Return 0                                 ;
   ip=HostIP(ips)                                           ;
   If inte=1 Then Return ip                                 ;Integer-IP ausgeben
   ipstr$=DottedIP(ip)                                       ;String-IP ausgeben
   Return ipstr$                                          ;
End Function                                             ;


Function create_player(host=0,name$="",ip$=0,id=1,port=2000)

FlushKeys()

   ;Neuen Typ anlegen

   pl.player= New player
   pl\name$=name$
   pl\port=port
   pl\timeout=10
   If host=1 Then

      pl\ip$=Internetip$

   Else

      pl\ip$=ip$

   EndIf



   If host=1 Then   ;Falls der Host einen neuen Player creaiert

      deinname$=name$
      pl\id=1

   Else

      pl\id=id

   EndIf


   Return 1
End Function


Function zeigeuser()
playeranzahl=0
Color 0,255,0
Rect 520,0,120,480
Color 255,0,0

For pl.player= Each player

   If pl\name$ <> "" Then

      playeranzahl=playeranzahl + 1

   EndIf

   Text 580,playeranzahl * 13,pl\name$,1

Next

End Function

Function eingabe()


;Das Eingabefeld zeichnen
Color 255,255,255
Rect 0,380,640,100

If okay=1 Then   taste=GetKey()

If taste > 31 Or taste=94 Then Txt$=Txt$ + Chr(taste)




Color 255,0,0
Text 5,zeilex,TxT$ +"|"

If KeyHit(14) And Len(TxT$)>0 Then

   txt$=LSet(Txt$, Len(TxT$)-1)   ;Backspace <-Löschen

EndIf

If Len(Txt$) > 79 Then      ;Zeilenumbruch erzwingen

   eingabezeichen$(i)=txt$
   i=i + 1

   zeilex=zeilex + 13
   Txt$=""

EndIf

For x= 0 To 5

If Len(eingabezeichen$(x)) > 0 Then

   Text 5,385 + (x * 13) ,eingabezeichen$(x)

EndIf

Next

If i = 6 And Len(txt$) > 71-(Len(deinname$)) Then

   okay=0
   i=6

EndIf

If KeyHit(28)  Then
i=0
   ;Hier wird die Naricht gesendet

   For x= 0 To 5

      If Len(eingabezeichen$(x)) > 0 Then

      For pl.player = Each player

      If pl\id <> deineid Then

         WriteByte Stream,1
         WriteLine Stream,eingabezeichen$(x)
         WriteLine Stream,deinname$
         SendUDPMsg Stream,pl\ip$,pl\port

      EndIf

      Next

         chatmsg(">" + deinname$ + " (" + zeit$ + ") : " + eingabezeichen$(x))



      ElseIf Len(txt$) > 0 And x = 5  Then

      For pl.player = Each player

      If pl\id <> deineid Then

         WriteByte Stream,1
         WriteLine Stream,txt$
         WriteLine Stream,deinname$
         SendUDPMsg Stream,pl\ip$,pl\port

      EndIf

      Next
         chatmsg(">" + deinname$ + " (" + zeit$ + ") : " + txt$)

      EndIf

   Next



   For x = 0 To 5

      eingabezeichen$(x)=""

   Next

   Txt$=""
   i=0

EndIf

End Function

;UDP-Messages auswerten und verarbeiten

Function get_msg_server()

;Hat jemand ausgetimet
If MilliSecs() - 1000 >= time  Then

   time=MilliSecs()

   For pl.player = Each player

      pl\timeout=pl\timeout - 1

      If pl\timeout = 0 And pl\id <> deineid Then

         loeschid=pl\id ;STIMMT NET---------------------------------------------------------


      For pl.player = Each player



            WriteByte Stream,6
            WriteByte Stream,loeschid
            SendUDPMsg Stream,pl\ip$,pl\port


      Next
      Exit
      EndIf

   Next


EndIf

While RecvUDPMsg(Stream)

If ReadAvail(Stream) Then

   msgid=ReadByte(Stream)

   Select msgid

   Case 0 ;Anmeldung
      playerzahl=playerzahl+1
      clientid=playerzahl
      name$=ReadLine(Stream)
      ip=UDPMsgIP(Stream)
      iples$=DottedIP(ip)
      absenderport=UDPMsgPort(Stream)
      create_player(0,name$,ip,clientid,absenderport)

      WriteByte Stream,1
      WriteByte Stream,clientid
      WriteLine Stream,ip
      SendUDPMsg Stream,ip,2001
      chatmsg("*** "+ name$ + " ist dem Chat um " + zeit$ + " beigetreten ***")

      ;Die Daten des neuen Clienten an alle anderen senden
      For pl.player= Each player

         If pl\id <> deineid And pl\id <> clientid Then   ;Die Daten nicht an sich oder den anderen neuen Clienten senden

            WriteByte Stream,2
            WriteByte Stream,clientid
            WriteLine stream,name$
            WriteLine stream,ip
            WriteInt stream,absenderport
            SendUDPMsg Stream,pl\ip$,pl\port

         EndIf

      Next

      For pl.player= Each player      ;Die Daten der anderen Clienten an den neuen Clienten schicken

         If pl\id <> clientid Then

            WriteByte Stream,4
            WriteByte Stream,pl\id
            WriteLine Stream,pl\name$
            WriteLine Stream,pl\ip$
            WriteInt Stream,pl\port
            SendUDPMsg Stream,ip,absenderport

         EndIf

      Next

   Case 1   ;Naricht

      naricht$=ReadLine(Stream)
      absender$=ReadLine(Stream)
      chatmsg(">" + absender$ + " (" + zeit$ + ") : " + naricht$)

   Case 5 ;Timeout verhindern

   timeid=ReadByte(Stream)

   For pl.player = Each player

      If pl\id=timeid Then

         pl\timeout=10

      EndIf

   Next


   Case 6   ;Ein Spieler hat ausgetimed

   loeschid=ReadByte(stream)

   For pl.player = Each player

      If pl\id = loeschid Then
      chatmsg("*** "+ pl\name$ + " hat den Chat um " + zeit$ + " Uhr verlassen ***")

      Delete pl.player

      EndIf

   Next

   End Select

EndIf
Wend

End Function

Function get_msg_client()

If MilliSecs() - 5000 >= time Then   ;Damit man nicht gekickt wird ^^

   time=MilliSecs()
   WriteByte Stream,5
   WriteByte Stream,deineid
   SendUDPMsg Stream,ipint(serverip$),2000

EndIf

While RecvUDPMsg(Stream)

If ReadAvail(Stream) Then

   msgid=ReadByte(Stream)

   Select msgid

   Case 1   ;Naricht

      naricht$=ReadLine(Stream)
      absender$=ReadLine(Stream)
      chatmsg(">" + absender$ + " (" + zeit$ + ") : " + naricht$)

   Case 2   ;Ein neuer Client ist dem Spiel beigetreten

      id=ReadByte(stream)
      name$=ReadLine(Stream)
      ip=ReadLine(Stream)
      absenderport=ReadInt(stream)
      create_player(0,name$,ip,id,absenderport)
      chatmsg("*** "+ name$ + " ist dem Chat um " + zeit$ + " beigetreten ***")

   Case 4 ;Die Daten der anderen User empfangen

      id=ReadByte(stream)
      name$=ReadLine(Stream)
      ipneu=ReadLine(Stream)
      absenderport=ReadInt(Stream)
      create_player(0,name$,ipneu,id,absenderport)


   Case 6   ;Ein Spieler hat ausgetimed

   loeschid=ReadByte(stream)

   For pl.player = Each player

      If pl\id = loeschid Then
      chatmsg("*** "+ pl\name$ + " hat den Chat um " + zeit$ + " Uhr verlassen ***")

      Delete pl.player

      EndIf

   Next

   End Select

EndIf

Wend

End Function


;Narichten ausgeben

Function chatmsg(msg$)
counter=counter+1


For co=0 To woeter - 1 Step 2

If Instr(Lower$(msg$),wort$(co)) Then msg$=Replace(Lower$(msg$),wort$(co),wort$(co+1))

Next

If counter=maxzeilen Then

   For   z.zeile=Each zeile

      If z\zeilenpos / 13 <> (maxzeilen -1) Then

         o.zeile= After z
         Text 100,100, o\zeilentxt$
         z\zeilentxt$=o\zeilentxt$

      ElseIf z\zeilenpos / 13 = (maxzeilen -1) Then


         z\zeilentxt$=msg$


      EndIf
   Next
   counter=counter - 1
Else

   z.zeile=New zeile
   z\zeilentxt$=msg$
   z\zeilenpos=counter * 13


EndIf

End Function


Function ipint(inputIP$)                                    ;-> wandelt ip$ in interger um
   Local break1,break2,break3,add1,add2,add3,add4,ipreturn            ;
   break1 = Instr(inputIP$,".")                              ;
   break2 = Instr(inputIP$,".",break1+1)                        ;
   break3 = Instr(inputIP$,".",break2+1)                        ;
   add1 = Mid(inputIP$,1,break1-1)                              ;
   add2 = Mid(inputIP$,break1+1,break2-1)                        ;
   add3 = Mid(inputIP$,break2+1,break3-1)                        ;
   add4 = Mid(inputIP$,break3+1)                              ;
   ipreturn=(add1 Shl 24) + (add2 Shl 16) + (add3 Shl 8) + add4      ;
   Return ipreturn                                          ;
End Function


                                          ;



Man kann den Chat auch umändern zu einem Professionellen Ego-Shooter aber das überlasse ich euch. Und bitte einen eigenen Script verwenden nicht diesen hier:
Code: [AUSKLAPPEN]

WriteLine tcp,"GET http://mapaplasman.ma.funpic.de/Chat_datein/ip.php"

zum testen dürft ihr das aber lassen oder mich fragen

Grüße
Smokie

Edit: Wir net bei der Hp angemeldet weil ich das pw nihct im Code habe aber sonst sollte es gehen
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet
  • Zuletzt bearbeitet von Smokie am So, Feb 09, 2014 14:23, insgesamt einmal bearbeitet

BlitzChecker

BeitragFr, Nov 25, 2005 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Was muss denn in dem eigenen PHP-Skript stehen?
Geht das so?
Code: [AUSKLAPPEN]
<?php
$ip = GETENV("REMOTE_ADDR");
die($ip);
?>
www.xairro.com

Smokie

BeitragSa, Nov 26, 2005 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh ja, das habe ich vergessen:
Code: [AUSKLAPPEN]

<?php
echo $_SERVER['REMOTE_ADD'];
?>


Grüße
Smokie
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet
  • Zuletzt bearbeitet von Smokie am Mo, Nov 28, 2005 17:34, insgesamt einmal bearbeitet

BlitzChecker

BeitragMo, Nov 28, 2005 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!

Mein Code war ja fast richtig... Rolling Eyes
www.xairro.com

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group