probleme mit internet "chat"

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

onkelz89

Betreff: probleme mit internet "chat"

BeitragMo, Mai 15, 2006 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

ich schreib erstma code auf dann wo die probleme sind

Code: [AUSKLAPPEN]

svrGame=CreateTCPServer(8080)

If svrGame<>0 Then
Print "Start erfolgreicht."
Else
Print "Start fehlerhaft"
End
End If


While Not KeyHit(1)
strStream=AcceptTCPStream(svrGame)
If strStream Then
nachricht$=ReadString$(strStream)
Print nachricht$
EndIf

If KeyHit(57) Then
tex$=Input("")

strmGame=OpenTCPStream("IP ADRESSE",8080)
WriteString strmGame,tex$
EndIf

Delay 1000
Wend


so diese datei habe ich und ein freund und bei IP ADRESSE sind jeweils die anderen eingetragen also freunddatei mit meiner ip meine datei mit freundip

er kann mir dinge schreiben ich ihm nicht da kommt memory access violation warum? bin amverzweifeln


danke im vorraus

Goodjee

BeitragMo, Mai 15, 2006 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, du brauchst einen server und einen client...

der server erstellt den tcp server und macht acceptstream....

er sendet außerdem über den rückgabewert von accepttcpstream mit writeline nachrichten..


der client sendet mit opentcpstream nachrichten und empfängt sie auch so...
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

onkelz89

BeitragMo, Mai 15, 2006 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ja nur oben hab ich das doch nur das ich so gesehen 2 server und 2 clienten habe oder ? halt server und client in einem... wie würdest du das denn sonst machen? kannst ja oben den code als beispiel nehmen und daneben schreiben was wo hin/weg muss

Geeecko

BeitragDi, Mai 16, 2006 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst die adresse von deinem freund abspeichern Wink
Dies ist aber leider nur für 2 benutzer (client+server)
Code: [AUSKLAPPEN]

svrGame=CreateTCPServer(8080)

If svrGame<>0 Then
Print "Start erfolgreicht."
Else
Print "Start fehlerhaft"
End
End If


While Not KeyHit(1)
strStream=AcceptTCPStream(svrGame)
If strStream Then
feund_adresse=strStream
EndIf

If KeyHit(57) Then
tex$=Input("")

WriteString freund_adresse,tex$
EndIf
;auselesen vopm freund
if readavail(freund_adresse)>0
print readline(freund_adresse)
endif
Delay 1000
Wend


Dieser Code ist leider nur für client+server, wenn du mehrere benutzen möchtest musst du dich mal mit types auseinandersetzen Very Happy (dooofff)
freund_ip ist sozusagen die ip adresse des freunden. des stream musst du nciht mehr öffnen, weil er sozusagen mit accepttcpstream geöffnet wurde ( Embarassed Confused ???)
Naja, habe ihn dort oben nicht getestet sollte aber funtzn Smile

mfg Gaia

BladeRunner

Moderator

BeitragDi, Mai 16, 2006 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Gaia hat Folgendes geschrieben:
...musst du dich mal mit types auseinandersetzen (dooofff)

Nein, sehr mächtig. Und mit einem Minimim an Lernbereitschaft zu verstehen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

onkelz89

BeitragDi, Mai 16, 2006 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

danke für die antworten. hab den code getestet und aber jetzt kommt noch ein memory access ... und zwar in der zeile If ReadAvail(freund_adresse)>0

der debug sagt er (der stream) existiert nicht. hab das programm geöffnet alleine zuhaus. nur wenn ich es nicht offen lassen kann kann ja auch kein freund dazustoßen.

zu der sache vonwegen das klappt nur mit einem server und einem client. das ist für mein projekt ausreichend. types kenn ich schon aber brauchs hier halt nich (soll kein chat werden wie normal wo mehrere reden will nur testen wie flüssig blitz das überhaupt macht)

hoffe das ihr mich versteht

MaTrixCruiser

BeitragMi, Mai 17, 2006 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Da mein problem bissel so ähnlich ist dacht ich ma.. mach ichs mir hier rein.
Also... das mit dem senden funct bei mir. Das heißt

Client sendet an server... server sendet zurück, dass es angekommen ist.
Doch nun geht es nicht weiter. Also wenn ich im client noch mal den befehl Writestring nehm, dann sendet es nicht noch mal zum server.
Oder server empfängt es nicht... das weiß ich halt nicht...

Bräucht halt hilfe..

Code: [AUSKLAPPEN]
;Client:
strmGame=OpenTCPStream("192.168.1.33",8080)
If strmGame<>0 Then
   Print "Client erfolgreich verbunden"
Else
   Print "Konnte keine Verbindung herstellen"
   WaitKey()
   End
End If

WriteString strmGame,"TEEEEST"
Print "Daten gesendet..."
Delay 1000
Print ReadString$(strmGame)+"<---"
Delay 100
WriteString strmGame,"TEEEEST22222" ;<--- das kommt dann schon nicht an
Print "noch mal"
Delay 1000
While Not KeyDown(1)

Wend
CloseTCPStream strmGame
End


Code: [AUSKLAPPEN]
;server
svrGame=CreateTCPServer(8080)
If svrGame<>0 Then
   Print "Server erfolgreich gestartet"

Else
   Print "Server konnte nicht gestartet werden"
   End
End If

While Not KeyDown(1)
strStream=AcceptTCPStream(svrGame)
   If strStream Then
      Print ReadString$(strStream)   
      Delay 1000

      WriteString (strStream,"OKAY!")
   Else
      Print "Keine Daten mehr..."
      Delay 1000
   EndIf
Wend
CloseTCPServer svrGame
WaitKey()
End



Wo ran liegt es? und wie bekomm ich eine beliebig häufige datenübertragung hin?
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S

MaTrixCruiser

BeitragMi, Mai 17, 2006 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Also um das ganze noch ma bissel zu vereinfachen.

Server schickt den wert der variable X an den Client. Client bekommt die daten und schickt nun "angekommen zurück". Nun soll das der Server lesen, aber dann weiterhin den wert X an den client schicken.
<-- das beispiel hat wenig mit dem quelltext zu tuen
Wie kann ich das machen?
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S
 

onkelz89

BeitragFr, Mai 19, 2006 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab mir das beispiel auch mal angesehen.



Code: [AUSKLAPPEN]
;Client:
strmGame=OpenTCPStream("192.168.1.33",8080)
If strmGame<>0 Then
   Print "Client erfolgreich verbunden"
Else
   Print "Konnte keine Verbindung herstellen"
   WaitKey()
   End
End If

WriteString strmGame,"TEEEEST"
Print "Daten gesendet..."
Delay 1000
Print ReadString$(strmGame)+"<---"
Delay 100
strmGame=OpenTCPStream("192.168.1.33",8080)
WriteString strmGame,"TEEEEST22222" ;<--- das kommt dann schon nicht an
Print "noch mal"
Delay 1000
While Not KeyDown(1)

Wend
CloseTCPStream strmGame
End



und ein opentcp hinzugefügt... jetzt gehts mit dem 2ten mal senden... aber warum muss man den immerwieder neu öffnen? gibts da nicht nen einfacheren / schnelleren weg?

und was ist auf der gegenseite mit dem server?

MaTrixCruiser

BeitragSo, Mai 21, 2006 10:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja... eigendlich müsste doch ein stream dafür reichen beliebig hin und her zu senden?!!

Steck nun schon ne weile an dem problem... also falls irgend jemanden was zu einfällt.... könnte hilfe gebrauchen

Ps:thx 2 onkelz89, dass du dich meinem komplizierten Code gewidmet hast
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S
 

lettorTrepuS

BeitragSo, Mai 21, 2006 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Jolinah

BeitragMo, Mai 22, 2006 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ja... eigendlich müsste doch ein stream dafür reichen beliebig hin und her zu senden?!!


Klar geht das Wink

Eigentlich müsste ReadLine usw. schon blockieren, d.h. darauf warten, bis wirklich was angekommen ist. Aber die Sache mit den Delays gefällt mir trotzdem nicht so...

Am besten wäre es kontinuierlich abzufragen ob wirklich was angekommen ist, und immer zu prüfen ob überhaupt noch eine Verbindung besteht. Der Client bzw. Server könnte ja mal ausfallen.

Hier mal ein Beispiel:

Server:
Code: [AUSKLAPPEN]
server = CreateTCPServer(9090)

If server = 0
   Print "Server konnte nicht gestartet werden"
   WaitKey
   End
EndIf


;In diesem Type werden die einzelnen Clients die
;verbunden sind gespeichert.
Type client
   Field stream
End Type



Print "Server gestartet"

While Not KeyDown(1)

   ;Nach neuen Clients ausschau halten
   stream = AcceptTCPStream(server)
   
   ;Neuer Client vorhanden
   If stream <> 0
      ;Client in eine Liste (Types) eintragen
      Print "Client verbunden"
      my.client = New client
      my\stream = stream
   EndIf

   ;Alle Clients in der Liste durchgehen
   For my.client = Each client
   
      ;Prüfen ob noch eine Verbindung existiert, wenn nicht
      ;wird der Stream geschlossen und der Client gelöscht.
      If Eof(my\stream) = -1 Or Eof(my\stream) = 1
         Print "Client hat die Verbindung getrennt"
         CloseTCPStream(my\stream)
         Delete my
      EndIf

      ;Wenn der Client noch existiert (bzw. verbunden ist)...
      If my <> Null
      
         ;... und Daten verfügbar sind...
         If ReadAvail(my\stream)
            ;Daten auslesen und eine Antwort schicken
            txt$ = ReadLine(my\stream)
            Print "Client: " + txt$
            WriteLine(my\stream, "Nachricht erhalten")
         EndIf
         
      EndIf
   Next

   Delay 50

Wend




;Bei allen verbunden Clients, die Verbindung trennen
;Und aus der Liste löschen
For my.client = Each client
   CloseTCPStream(my\stream)
   Delete my
Next

;Server beenden
CloseTCPServer(server)

Print "Server beendet"
WaitKey

End


Client:
Code: [AUSKLAPPEN]
client = OpenTCPStream("localhost", 9090)

If client = 0
   Print "Verbindung zum Server fehlgeschlagen"
   WaitKey
   End
EndIf

Print "Erfolgreich verbunden"

While Not KeyHit(1)

   ;Keine Verbindung mehr...
   If Eof(client) = -1 Or Eof(client) = 1
      Print "Verbindung mit dem Server verloren"
      CloseTCPStream(client)
      client = 0
      Exit
   EndIf

      
   ;Wenn Daten verfügbar sind...
   If ReadAvail(client)
      ;Daten lesen und ausgeben
      txt$ = ReadLine(client)
      Print "Server: " + txt$
   EndIf
   
   ;Leertaste gedrückt?
   If KeyHit(57)
      WriteLine(client, "Test-Nachricht")
   EndIf

   Delay 50
      
Wend

;Noch verbunden?
If client <> 0
   ;Stream schliessen
   CloseTCPStream(client)

   Print "Verbindung getrennt"
EndIf

WaitKey

End


Hoffe das hilft euch weiter Wink

MaTrixCruiser

BeitragDi, Mai 23, 2006 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ALso... VIELEN DANK
is echt super... hat mich viel zeit gekostet und du hast mir noch mehr zeit gespart!!!

Problem gelöst!!!
zumindest meins
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group