![]() |
Client und Socket / Datenversand bzw. Empfangen
Hallo Leute, ich hoffe ihr könnt mir weiterhelfen!!!???!!!
Also die Aufgabe ist es einen Clienten und einen Server zu programmieren. (Das war bisher kein Problem und eine Verbindung läßt sich auch herstellen). Jetzt soll auf dem Clienten und dem Server mehrere Checkboxen eingefügt werden, die voneinander abhängig sind (d.h. wenn Checkbox1=true then Checkbox2=true und umgekehrt, wenn Checkbox2=false then Checkbox1=false). Folgende Überlegung war dem Server eine Zahl zu schicken:
Delphi-Quellcode:
Um diese Zahl dann auf dem Server verarbeiten zu könenn und dort die zugehörige Checkbox zu aktivieren.
procedure CheckBox1Click(Sender: TObject);
begin ClientSocket1.Socket.SendText('1'); end; Hier ist mein Quelltext vom Server und Clienten:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ScktComp, StdCtrls, ComCtrls; type TIP = class(TForm) Label1: TLabel; Label2: TLabel; ClientVerbinden: TButton; ClientTrennen: TButton; ServerVerbinden: TButton; ServerTrennen: TButton; PortClient: TEdit; Label3: TLabel; IP: TEdit; Label4: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; CheckBox5: TCheckBox; CheckBox6: TCheckBox; CheckBox7: TCheckBox; CheckBox8: TCheckBox; ClientSocket1: TClientSocket; ServerSocket1: TServerSocket; Timer1: TTimer; PortServer: TEdit; Label5: TLabel; Beenden: TButton; StatusBar1: TStatusBar; Label6: TLabel; procedure ClientVerbindenClick(Sender: TObject); procedure ServerVerbindenClick(Sender: TObject); procedure BeendenClick(Sender: TObject); procedure ClientTrennenClick(Sender: TObject); procedure ServerTrennenClick(Sender: TObject); procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure CheckBox1Click(Sender: TObject); procedure CheckBox2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var IP: TIP; implementation {$R *.DFM} procedure TIP.ClientVerbindenClick(Sender: TObject); begin clientsocket1.address:= IP.text; clientsocket1.port:= strtoint(PortClient.text); clientsocket1.active:=true; end; procedure TIP.ServerVerbindenClick(Sender: TObject); begin serversocket1.port:= strtoint(PortServer.text); serversocket1.active:=true; end; procedure TIP.BeendenClick(Sender: TObject); begin close; end; procedure TIP.ClientTrennenClick(Sender: TObject); begin clientsocket1.active:=false; end; procedure TIP.ServerTrennenClick(Sender: TObject); begin serversocket1.active:=false; end; procedure TIP.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin statusbar1.simpletext:='Verbindung wurde getrennt'; end; procedure TIP.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin statusbar1.simpletext:='Error. Verbindung wird getrennt!'; //Bei Fehler wird Verbindung getrennt clientsocket1.Active:=false; end; procedure TIP.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin statusbar1.simpletext:='Verbunden mit IP ' +IP.text+ ' und Port ' + PortClient.text; end; end. Über ein paar Lösungen von euch, würde ich mich sehr freuen. Gruß Chippie82 |
Re: Client und Socket / Datenversand bzw. Empfangen
Ich versteh die Frage nicht ganz. Sind Server und Client ein und das selbe Programm und was genau willst Du wissen.. wie man am besten die Kommunikation ausprogrammiert, damitt die Checkboxen immer den selben wert haben, oder was?
|
Re: Client und Socket / Datenversand bzw. Empfangen
im onclick ereigniss von der checkbox einfach reinschreiben
Delphi-Quellcode:
bzw
If Checkbox1.checked then Clientsocket1.socket.sendtext('1t') else Clientsocket1.socket.sendtext('1f');
Delphi-Quellcode:
bei interpreter im onread ereigniss wiederum
If Checkbox1.checked then Serversocket1.socket.sendtext('1t') else Serversocket1.socket.Connections[0].sendtext('1f');
Delphi-Quellcode:
var text:String;
begin text := Socket.ReceiveText; if text[1] = '1' then if text[2] = 't' then checkbox1.checked := true else checkbox1.checked := false; end; nicht getestet |
Re: Client und Socket / Datenversand bzw. Empfangen
Also mein Problem ist, wie bekomme ich es hin, dass der Server die gesendete Zahl durch die Checkbox verarbeiten kann (empfängt) und mir dann die andere Checkbox auch setzt? Wie verhält es sich dann nachher beim zurücksetzen?
Konnte bisher nicht das Problem lösen, wenn ich Checkbox1 gesetz habe, dann wurde die Checkbox2 auch gesetzt, jedoch klappte es nicht mehr beim zurücksetzen.
Delphi-Quellcode:
procedure TIP.CheckBox1Click(Sender: TObject);
begin checkbox2.checked:=true; end; Chippie82 |
Re: Client und Socket / Datenversand bzw. Empfangen
wenn Du es so macht, wie pacman1986 es geschrieben hat, dann wird genau das passieren, wie Du es willst. ^^
|
Re: Client und Socket / Datenversand bzw. Empfangen
Soll der dritte Befehl in das OnRead Ereignis des Servers oder des Clienten?
Gruß Chippie82 |
Re: Client und Socket / Datenversand bzw. Empfangen
naja kommt an, von wo nach wo Du sendest. wnn der Client an den Server sendet, dann muss es beim Server rein und andersherum wäre es umgedreht. Falls Du in beide richtungen sendets, dann sollte es in beide onread-Events.
Edit: da Du ClientSocket1.Socket.SendText('1'); nutzt muss es beim Server rein. |
Re: Client und Socket / Datenversand bzw. Empfangen
Vom Clienten zum Server klappt die Sache, mit folgendem Quelltext:
Delphi-Quellcode:
Aber wenn ich das jetzt umgekehrt machen möchte die Checkboxen beim Server anklicken und beim Clienten sollen sie ausgehen, dann bekomme ich folgende Fehlermeldung:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ScktComp, StdCtrls, ComCtrls; type TIP = class(TForm) Label1: TLabel; Label2: TLabel; ClientVerbinden: TButton; ClientTrennen: TButton; ServerVerbinden: TButton; ServerTrennen: TButton; PortClient: TEdit; Label3: TLabel; IP: TEdit; Label4: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; CheckBox5: TCheckBox; CheckBox6: TCheckBox; CheckBox7: TCheckBox; CheckBox8: TCheckBox; ClientSocket1: TClientSocket; ServerSocket1: TServerSocket; Timer1: TTimer; PortServer: TEdit; Label5: TLabel; Beenden: TButton; StatusBar1: TStatusBar; Label6: TLabel; CheckBox9: TCheckBox; CheckBox10: TCheckBox; CheckBox11: TCheckBox; CheckBox12: TCheckBox; CheckBox13: TCheckBox; CheckBox14: TCheckBox; CheckBox15: TCheckBox; CheckBox16: TCheckBox; procedure ClientVerbindenClick(Sender: TObject); procedure ServerVerbindenClick(Sender: TObject); procedure BeendenClick(Sender: TObject); procedure ClientTrennenClick(Sender: TObject); procedure ServerTrennenClick(Sender: TObject); procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure CheckBox1Click(Sender: TObject); procedure CheckBox2Click(Sender: TObject); procedure CheckBox3Click(Sender: TObject); procedure CheckBox4Click(Sender: TObject); procedure CheckBox5Click(Sender: TObject); procedure CheckBox6Click(Sender: TObject); procedure CheckBox7Click(Sender: TObject); procedure CheckBox8Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var IP: TIP; implementation {$R *.DFM} procedure TIP.ClientVerbindenClick(Sender: TObject); begin clientsocket1.address:= IP.text; clientsocket1.port:= strtoint(PortClient.text); clientsocket1.active:=true; end; procedure TIP.ServerVerbindenClick(Sender: TObject); begin serversocket1.port:= strtoint(PortServer.text); serversocket1.active:=true; end; procedure TIP.BeendenClick(Sender: TObject); begin close; end; procedure TIP.ClientTrennenClick(Sender: TObject); begin clientsocket1.active:=false; end; procedure TIP.ServerTrennenClick(Sender: TObject); begin serversocket1.active:=false; end; procedure TIP.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin statusbar1.simpletext:='Verbindung wurde getrennt'; end; procedure TIP.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin statusbar1.simpletext:='Error. Verbindung wird getrennt!'; //Bei Fehler wird Verbindung getrennt clientsocket1.Active:=false; end; procedure TIP.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin statusbar1.simpletext:='Verbunden mit IP ' +IP.text+ ' und Port ' + PortClient.text; end; procedure TIP.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var text:String; begin text := Socket.ReceiveText; if text[1] = '1' then if text[2] = 't' then checkbox9.checked := true else checkbox9.checked := false; if text[1] = '2' then if text[2] = 't' then checkbox10.checked := true else checkbox10.checked := false; if text[1] = '3' then if text[2] = 't' then checkbox11.checked := true else checkbox11.checked := false; if text[1] = '4' then if text[2] = 't' then checkbox12.checked := true else checkbox12.checked := false; if text[1] = '5' then if text[2] = 't' then checkbox13.checked := true else checkbox13.checked := false; if text[1] = '6' then if text[2] = 't' then checkbox14.checked := true else checkbox14.checked := false; if text[1] = '7' then if text[2] = 't' then checkbox15.checked := true else checkbox15.checked := false; if text[1] = '8' then if text[2] = 't' then checkbox16.checked := true else checkbox16.checked := false; end; procedure TIP.CheckBox1Click(Sender: TObject); begin If Checkbox1.checked then Clientsocket1.socket.sendtext('1t') else Clientsocket1.socket.sendtext('1f'); end; procedure TIP.CheckBox2Click(Sender: TObject); begin If Checkbox2.checked then Clientsocket1.socket.sendtext('2t') else Clientsocket1.socket.sendtext('2f'); end; procedure TIP.CheckBox3Click(Sender: TObject); begin If Checkbox3.checked then Clientsocket1.socket.sendtext('3t') else Clientsocket1.socket.sendtext('3f'); end; procedure TIP.CheckBox4Click(Sender: TObject); begin If Checkbox4.checked then Clientsocket1.socket.sendtext('4t') else Clientsocket1.socket.sendtext('4f'); end; procedure TIP.CheckBox5Click(Sender: TObject); begin If Checkbox5.checked then Clientsocket1.socket.sendtext('5t') else Clientsocket1.socket.sendtext('5f'); end; procedure TIP.CheckBox6Click(Sender: TObject); begin If Checkbox6.checked then Clientsocket1.socket.sendtext('6t') else Clientsocket1.socket.sendtext('6f'); end; procedure TIP.CheckBox7Click(Sender: TObject); begin If Checkbox7.checked then Clientsocket1.socket.sendtext('7t') else Clientsocket1.socket.sendtext('7f'); end; procedure TIP.CheckBox8Click(Sender: TObject); begin If Checkbox8.checked then Clientsocket1.socket.sendtext('8t') else Clientsocket1.socket.sendtext('8f'); end; end. Im Projekt Project1.exe ist eine Exception der Klasse ESocketError aufgetreten. Meldung: 'Windows-Socket-Fehler: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde (10057), auf API'send". Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen. Hier ist der Quelltext dazu:
Delphi-Quellcode:
Kann mir jemand bei dem Problem weiterhelfen?
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ScktComp, StdCtrls, ComCtrls; type TIP = class(TForm) Label1: TLabel; Label2: TLabel; ClientVerbinden: TButton; ClientTrennen: TButton; ServerVerbinden: TButton; ServerTrennen: TButton; PortClient: TEdit; Label3: TLabel; IP: TEdit; Label4: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; CheckBox5: TCheckBox; CheckBox6: TCheckBox; CheckBox7: TCheckBox; CheckBox8: TCheckBox; ClientSocket1: TClientSocket; ServerSocket1: TServerSocket; Timer1: TTimer; PortServer: TEdit; Label5: TLabel; Beenden: TButton; StatusBar1: TStatusBar; Label6: TLabel; CheckBox9: TCheckBox; CheckBox10: TCheckBox; CheckBox11: TCheckBox; CheckBox12: TCheckBox; CheckBox13: TCheckBox; CheckBox14: TCheckBox; CheckBox15: TCheckBox; CheckBox16: TCheckBox; procedure ClientVerbindenClick(Sender: TObject); procedure ServerVerbindenClick(Sender: TObject); procedure BeendenClick(Sender: TObject); procedure ClientTrennenClick(Sender: TObject); procedure ServerTrennenClick(Sender: TObject); procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure CheckBox1Click(Sender: TObject); procedure CheckBox2Click(Sender: TObject); procedure CheckBox3Click(Sender: TObject); procedure CheckBox4Click(Sender: TObject); procedure CheckBox5Click(Sender: TObject); procedure CheckBox6Click(Sender: TObject); procedure CheckBox7Click(Sender: TObject); procedure CheckBox8Click(Sender: TObject); procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); procedure CheckBox9Click(Sender: TObject); procedure CheckBox10Click(Sender: TObject); procedure CheckBox11Click(Sender: TObject); procedure CheckBox12Click(Sender: TObject); procedure CheckBox13Click(Sender: TObject); procedure CheckBox14Click(Sender: TObject); procedure CheckBox15Click(Sender: TObject); procedure CheckBox16Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var IP: TIP; implementation {$R *.DFM} procedure TIP.ClientVerbindenClick(Sender: TObject); begin clientsocket1.address:= IP.text; clientsocket1.port:= strtoint(PortClient.text); clientsocket1.active:=true; end; procedure TIP.ServerVerbindenClick(Sender: TObject); begin serversocket1.port:= strtoint(PortServer.text); serversocket1.active:=true; end; procedure TIP.BeendenClick(Sender: TObject); begin close; end; procedure TIP.ClientTrennenClick(Sender: TObject); begin clientsocket1.active:=false; end; procedure TIP.ServerTrennenClick(Sender: TObject); begin serversocket1.active:=false; end; procedure TIP.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin statusbar1.simpletext:='Verbindung wurde getrennt'; end; procedure TIP.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin statusbar1.simpletext:='Error. Verbindung wird getrennt!'; //Bei Fehler wird Verbindung getrennt clientsocket1.Active:=false; end; procedure TIP.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin statusbar1.simpletext:='Verbunden mit IP ' +IP.text+ ' und Port ' + PortClient.text; end; procedure TIP.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var text:String; begin text := Socket.ReceiveText; if text[1] = '1' then if text[2] = 't' then checkbox9.checked := true else checkbox9.checked := false; if text[1] = '2' then if text[2] = 't' then checkbox10.checked := true else checkbox10.checked := false; if text[1] = '3' then if text[2] = 't' then checkbox11.checked := true else checkbox11.checked := false; if text[1] = '4' then if text[2] = 't' then checkbox12.checked := true else checkbox12.checked := false; if text[1] = '5' then if text[2] = 't' then checkbox13.checked := true else checkbox13.checked := false; if text[1] = '6' then if text[2] = 't' then checkbox14.checked := true else checkbox14.checked := false; if text[1] = '7' then if text[2] = 't' then checkbox15.checked := true else checkbox15.checked := false; if text[1] = '8' then if text[2] = 't' then checkbox16.checked := true else checkbox16.checked := false; end; procedure TIP.CheckBox1Click(Sender: TObject); begin If Checkbox1.checked then Clientsocket1.socket.sendtext('1t') else Clientsocket1.socket.sendtext('1f'); end; procedure TIP.CheckBox2Click(Sender: TObject); begin If Checkbox2.checked then Clientsocket1.socket.sendtext('2t') else Clientsocket1.socket.sendtext('2f'); end; procedure TIP.CheckBox3Click(Sender: TObject); begin If Checkbox3.checked then Clientsocket1.socket.sendtext('3t') else Clientsocket1.socket.sendtext('3f'); end; procedure TIP.CheckBox4Click(Sender: TObject); begin If Checkbox4.checked then Clientsocket1.socket.sendtext('4t') else Clientsocket1.socket.sendtext('4f'); end; procedure TIP.CheckBox5Click(Sender: TObject); begin If Checkbox5.checked then Clientsocket1.socket.sendtext('5t') else Clientsocket1.socket.sendtext('5f'); end; procedure TIP.CheckBox6Click(Sender: TObject); begin If Checkbox6.checked then Clientsocket1.socket.sendtext('6t') else Clientsocket1.socket.sendtext('6f'); end; procedure TIP.CheckBox7Click(Sender: TObject); begin If Checkbox7.checked then Clientsocket1.socket.sendtext('7t') else Clientsocket1.socket.sendtext('7f'); end; procedure TIP.CheckBox8Click(Sender: TObject); begin If Checkbox8.checked then Clientsocket1.socket.sendtext('8t') else Clientsocket1.socket.sendtext('8f'); end; procedure TIP.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var text:String; begin text := Socket.ReceiveText; if text[1] = '9' then if text[2] = 't' then checkbox1.checked := true else checkbox1.checked := false; if text[1] = '10' then if text[2] = 't' then checkbox2.checked := true else checkbox2.checked := false; if text[1] = '11' then if text[2] = 't' then checkbox3.checked := true else checkbox3.checked := false; if text[1] = '12' then if text[2] = 't' then checkbox4.checked := true else checkbox4.checked := false; if text[1] = '13' then if text[2] = 't' then checkbox5.checked := true else checkbox5.checked := false; if text[1] = '14' then if text[2] = 't' then checkbox6.checked := true else checkbox6.checked := false; if text[1] = '15' then if text[2] = 't' then checkbox7.checked := true else checkbox7.checked := false; if text[1] = '16' then if text[2] = 't' then checkbox8.checked := true else checkbox8.checked := false; end; procedure TIP.CheckBox9Click(Sender: TObject); begin If Checkbox9.checked then Serversocket1.socket.sendtext('9t') else Serversocket1.socket.Connections[0].sendtext('9f'); end; procedure TIP.CheckBox10Click(Sender: TObject); begin If Checkbox10.checked then Serversocket1.socket.sendtext('10t') else Serversocket1.socket.Connections[0].sendtext('10f'); end; procedure TIP.CheckBox11Click(Sender: TObject); begin If Checkbox11.checked then Serversocket1.socket.sendtext('11t') else Serversocket1.socket.Connections[0].sendtext('11f'); end; procedure TIP.CheckBox12Click(Sender: TObject); begin If Checkbox12.checked then Serversocket1.socket.sendtext('12t') else Serversocket1.socket.Connections[0].sendtext('12f'); end; procedure TIP.CheckBox13Click(Sender: TObject); begin If Checkbox13.checked then Serversocket1.socket.sendtext('13t') else Serversocket1.socket.Connections[0].sendtext('13f'); end; procedure TIP.CheckBox14Click(Sender: TObject); begin If Checkbox14.checked then Serversocket1.socket.sendtext('14t') else Serversocket1.socket.Connections[0].sendtext('14f'); end; procedure TIP.CheckBox15Click(Sender: TObject); begin If Checkbox15.checked then Serversocket1.socket.sendtext('15t') else Serversocket1.socket.Connections[0].sendtext('15f'); end; procedure TIP.CheckBox16Click(Sender: TObject); begin If Checkbox16.checked then Serversocket1.socket.sendtext('1t') else Serversocket1.socket.Connections[0].sendtext('16f'); end; end. Gruß Chippie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz