Registriert seit: 5. Aug 2011
188 Beiträge
|
Chattool - Probleme beim Übermitteln des Usernames
31. Aug 2011, 11:33
Delphi-Version: 5
Delphi-Version: XE
Hallo,
habe ein Chattool, das später zum kommunizieren per Wlan geeignet sein soll (das wir im unterricht miteinander schreiben können (ohne wlan)).
Das ganze sieht so aus:
http://imageshack.us/f/854/unconnected.png/
Wenn man sich verbindet sieht es dann so aus:
http://imageshack.us/photo/my-images...onnectedp.png/
Wie man an Abbildung 2 erkennen kann, ist im Fenster "--UserList--" alles leer. Beim Server wird aber ip + Username angezeigt.
ich möchte die Leute die verbunden sind in dem Fenster angezeigt haben, um später einen private chat zu realisieren.
Übrigens läuft das tool über TServerSocket und TClientSocket!
aber weiß grade nicht weiter! hier mal der code der Stelle:
Client:
Code:
procedure TFormClient.ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
richeditNachrichten.Lines.Add('Status: verbunden mit ' + socket.RemoteAddress);
//Server eigenen Namen mitteilen
client.socket.SendText(inttostr(edit1.color) + ';' + editusername.text + ';' + '!Connected#');
Timer2.Enabled := true;
end;
procedure TFormClient.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
richeditNachrichten.Lines.Add('Status: getrennt mit ' + socket.RemoteAddress);
//Eigenen Name wieder aus Liste auf Server löschen
client.socket.SendText(inttostr(edit1.color) + ';' + editusername.text + ';' + '!Disconnected#');
end;
procedure TFormClient.Timer2Timer(Sender: TObject);
begin
Form2.richeditusers.Clear;
//Kontaktliste abrufen
client.Socket.SendText(inttostr(edit1.color) + ';' + editusername.text + ';' + '!GetList#');
end;
procedure TFormClient.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i, iPos1, iPos2, iPos3 :integer;
sFarbe, sText, sUsername, sIP: String;
begin
sText := Socket.ReceiveText;
if Pos('/', Trim(sText)) = 1 then
begin
iPos3 := Pos(';', sText);
sIP := '';
if iPos3 > 0 then
begin
sIP := Copy(sText, 2, iPos3-1);
if sIP = sEigeneIP then
begin
sText := Copy(sText, iPos3+1, Length(sText));
if Pos('!LIST#', sText) > 0 then
begin
sText := Copy(sText, Pos('#', sText) + 1, Length(sText));
repeat
if Pos(';', sText) > 0 then
begin
Form2.richeditusers.lines.Add(Copy(sText, 1, Pos(';', sText)-1));
sText := Copy(sText, Pos(';', sText) + 1, Length(sText));
end
else
begin
Form2.richeditusers.lines.Add(Copy(sText, 1, Length(sText)));
sText := '';
end;
until Length(sText) > 0;
end;
end;
end;
Exit;
end;
iPos1 := Pos(';', sText);
sFarbe := '';
if iPos1 > 0 then
begin
sFarbe := copy(sText, 1, ipos1 -1);
delete(sText, 1, iPos1);
end;
iPos2 := Pos(';', sText);
if iPos2 > 0 then
begin
sUsername := copy(sText, 1, ipos2 -1);
delete(sText, 1, ipos2);
end;
if (stext <> '') then
begin
if sFarbe = '' then
sFarbe := '0';
RichEditNachrichten.SelAttributes.Color := strtoint(sFarbe);
richeditNachrichten.Lines.Add(sUsername + ' -> ' + sText);
end;
end;
procedure TFormClient.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Client.Socket.Close;
end;
Und der Server:
Code:
function TFormServerMain.fsGetChatterList : string;
var sList : string;
iI : integer;
begin
Result := '';
sList := '';
try
for iI := 0 to ListBoxUser.Count - 1 do
begin
if iI = 0 then
sList := sList + ListBoxUser.Items[iI]
else
sList := sList + ';' + ListBoxUser.Items[iI];
end;
finally
Result := sList;
end;
end;
procedure TFormServerMain.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i:integer;
sNachricht: String;
iPos1: Integer;
iPos2: Integer;
iPos3: Integer;
sFarbe: String;
sUsername: String;
sText: String;
sChatterList : string;
begin
sChatterList := '';
sNachricht := Socket.ReceiveText;
iPos1 := Pos(';', sNachricht);
if iPos1 > 0 then
begin
sFarbe := copy(sNachricht, 1, ipos1 -1);
delete(sNachricht, 1, iPos1); //sNachricht := Copy(sNachricht,ipos1+1,length(sNachricht));
end;
iPos2 := Pos(';', sNachricht);
if iPos2 > 0 then
begin
sUsername := copy(sNachricht, 1, ipos2 -1);
delete(sNachricht, 1, ipos2);
end;
//Name von Client beim Connect erhalten
if Pos('!Connected#', sNachricht) > 0 then
begin
ListBoxUser.Items.Add(Socket.RemoteAddress + '-' + sUsername);
end
else
begin
if Pos('!Disconnected#', sNachricht) > 0 then
begin
for i := 0 to ListBoxUser.Count - 1 do
begin
if ListBoxUser.Items[i] = Socket.RemoteAddress + '-' + sUsername then
begin
ListBoxUser.Items.Delete(i);
Exit;
end;
end;
end
else
begin
if Pos('!GetList#', sNachricht) > 0 then
begin
//Liste der Chatter versenden
sChatterList := fsGetChatterList;
for i := 0 to server.Socket.ActiveConnections - 1 do
begin
server.Socket.Connections[i].SendText('/' + server.Socket.Connections[i].RemoteAddress + ';!LIST#' + sChatterList);
end;
end
else
begin
for i := 0 to server.Socket.ActiveConnections - 1 do
server.socket.Connections[i].SendText(sFarbe + ';' + sUsername + ';' + sNachricht);
end;
end;
end;
end;
Ich hoffe jemand nimmt sich die Zeit ^.^ - Danke im vorraus
Geändert von Lyan (31. Aug 2011 um 11:45 Uhr)
|