Senden und empfangen über TCP, mit B+ von ???
Erstelle 2 Programme mit dem gleichen Quelltext.

In dem einen ist:
port_in = 20000
port_out = 20001

und im anderen:
port_in = 20001
port_out = 20000

Also port_in und port_out vertauscht...

Kurzerklärung:
Es wird ein nicht editierbares AusgabeFenster (text_out) und ein editierbares EingabeFenster (text_in) erstellt.

Über eine Event-Zeitsteuerung Case $4001 in Verbindung mit timer=CreateTimer(10)
wird der Server-Empfang stream_in = AcceptTCPStream(server)
10 mal in der Sekunde auf empfangene Daten überprüft.

Wen Empfangene Daten anliegen, werden diese über
AddTextAreaText text_out, "empfang > "+ ReadLine$(stream_in) +nl$
ausgelesen und auf text_out aus gegeben.

nl$ bedeutet NewLine und enthält Chr$(13) also ein Enter für neue Linie/Zeile.
Sonst wird alles in einer Zeile geschrieben.

Die Eingabe und das Senden geschieht folgendermasen:
Über Case $401 wird überprüft ob ein Gadget Action stattfand
und mit EventSource()=text_in wird überprüft ob die Aktion vom Eingabefenster kam.
EventData()=13 überprüft ob dann die Eingabetaste (Enter) gedrückt wurde.

Wen diese 3 Bedinungen stimmen wird ein Ausgangs-Stream (stream_out)erstellt und
überprüft ob eine Verbindung (stream_out<>0) zum anderen Fenster erstellt werden konnte.

Erst jetzt werden über TextFieldText$(text_in) die Zeile die man eingeben hat in chars$ eingelesen.
Dieser wird mit WriteLine stream_out, chars$ über den TCP-Stream an das andere Fenster gesendet.
Der Text-Inhalt von TextField (text_in) wird durch SetGadgatText gelöscht
und der Stream wird geschlossen.
Das es jetzt aussieht wie ein Chat wird der Eingegebene Text noch über AddTextAreaText an das eigene text_out ausgebenen.

Eigentlich ist es nicht so schwer, da alles auf festen Regeln und Abläufen besteht.
1) warte auf Event (ein Ereignis)
2) auswerten des Ereignis (Timer, Tastendruck Eingabe)
3) Reaktion auf das erwartete Ereignis (Ausgabe eines Text)

Also genau nach dem EVA Prinip: Eingabe => Verarbeitung => Ausgabe

[code:1:a0e4c73205]
wx = 400
wy = 430
dx = GadgetWidth(Desktop())/2 - wx/2
dy = GadgetHeight(Desktop())/2 - wy/2

win = CreateWindow("Server", 10, 10, wx, wy, 0, 1+8)

text_out = CreateTextArea(10, 10, 400-26, 400-70, win)
DisableGadget text_out

text_in = CreateTextField(10, 350, 400-26, 20, win)

;###############################################

Global nl$ = Chr$(13)

port_in = 20000
port_out = 20001

server = CreateTCPServer(port_in)

If server <> 0 Then
AddTextAreaText text_out, "Server ist Online" +nl$+nl$
Else
AddTextAreaText text_out, "Server fehler" +nl$+nl$
EndIf

;###############################################

timer = CreateTimer(10)

;---

While Not KeyHit(1)

Select WaitEvent()

Case $803 ; Ende
End

Case $4001 ; zeitgesteuerer Empfang
If EventSource() = timer Then

SetStatusText win, (1000/(MilliSecs()-tt)) +" fps"
tt=MilliSecs()

stream_in = AcceptTCPStream(server)

If stream_in > 0 Then
If ReadAvail(stream_in) > 0 Then
AddTextAreaText text_out, "empfang > "+ ReadLine$(stream_in) +nl$
EndIf
EndIf
EndIf

Case $401 ; event-gesteuertes Senden
If EventSource()=text_in Then
If EventData() = 13 Then
stream_out = OpenTCPStream("127.0.0.1",port_out)
If stream_out <> 0 Then
chars$ = TextFieldText$(text_in)
WriteLine stream_out, chars$
SetGadgetText text_in, ""
CloseTCPStream stream_out
AddTextAreaText text_out, "senden > " + chars$ +nl$
EndIf
EndIf
EndIf

End Select

Wend

End
[/code:1:a0e4c73205]



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: