Avatar billede frossen Nybegynder
12. august 2003 - 21:40 Der er 11 kommentarer og
1 løsning

Hjælp til en chat server

jeg vil lave en slags chat server så jeg vil ha en host hvor flere klienter kan connecte til og når de klienter så sender en besked til den host skal alle jo så få den...

nogen ideer til hvordan jeg får lavet disse 2 programmer?
Avatar billede jara06 Nybegynder
12. august 2003 - 21:43 #1
jeg lavede engang et chatprogram på en skoleperiode i delphi, med oracle db som backend...
Kig på serversockets. Der ligger endda et eksempel med i examples i delphi mappen
Avatar billede frossen Nybegynder
12. august 2003 - 21:45 #2
det prøver jeg..
Avatar billede frossen Nybegynder
12. august 2003 - 22:27 #3
det eneste jeg lige kan finde er noget lavet i indy.. og det kender jeg ikke lige til..
Avatar billede jara06 Nybegynder
13. august 2003 - 08:26 #4
Jeg har ikke lige Delphi inde .. hvilken version er det ? Jeg mener der var serversockets med fra ver. 4 ...
Avatar billede TRoXa Novice
13. august 2003 - 09:30 #5
hvis det er en ny version af delphi du kører med, så er det nok derfor, da de ikke er lige så nemme at finde, men komponenterne du skal bruge hedder ServerSocket og Clientsocket og ligger under "Internet" fanen.

Og jeg mener ikke der er eksempler med til de 2 komponenter, da Borland vist hellere vil have at man bruger Indy.
Avatar billede jara06 Nybegynder
13. august 2003 - 09:47 #6
hehe, troxa knows ;) And I know troxa
... For the Birds !
Avatar billede TRoXa Novice
14. august 2003 - 02:21 #7
yeah for the birds ;) hehehe .. du blir nødt til at komme på msn jara .. :)
Avatar billede jara06 Nybegynder
15. august 2003 - 08:32 #8
hehe, gider ik have flere sikkerhedshuller på min maskine, så jeg holder mig fra msn foreløbig .. sry :)
Avatar billede bananjoe Nybegynder
17. august 2003 - 19:11 #9
serversocket og clientsocket er ikke med i delphi 7 og videre
Avatar billede kaper Nybegynder
25. august 2003 - 14:33 #10
hmmm - det er da sært - jeg har benyttet D7 Evaluation og lavede en IRC klient med ClientSocket... Nu benytter jeg D7 Pro og her findes det ikke... Nåmmen sig lige til, hvis du kan benytte ClientSocket, for jeg har en fin kode, hvis du er interesseret.
Avatar billede frossen Nybegynder
26. august 2003 - 01:07 #11
client og server socket findes i delphi 6 som jeg bruger
Avatar billede kaper Nybegynder
27. august 2003 - 07:59 #12
Ok - men jeg bliver nødt til at sende en 'skrabet' kode, da jeg jo desværre ikke kan teste det længere i D7 Pro... :(
Indsæt:
Edit1 til servernavn (fx irc.quakenet.eu.org)
Edit2 til port (næsten altid 6667)
Button1 til connection
Button2 til at sende kommando
Edit3 til kommando
og så lige Memo1


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;
function Hex(strData:string): string;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    ClientSocket1: TClientSocket;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Hex(strData:string): string;
var sresult:string; sfinal:string; hexc:cardinal; i:integer;
begin
  i:=1;
  while i<=length(strData) do
    begin
      hexc := strtoint('$' + copy(strData,i,2));
      sresult :=  inttostr(hexc);
      sresult := chr(strtoint(sresult));
      sfinal := sfinal + sresult;
      i:=i+2;
    end;
  result := sfinal
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Host:=edit1.text;
clientsocket1.Port:=strtoint(edit2.Text);
clientsocket1.active:=true;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  ipacket:string; idata:string;
begin
idata:=clientsocket1.Socket.ReceiveText;
memo1.Text:=memo1.text + idata;

if pos('PING',idata) <> 0 then
begin
clientsocket1.Socket.SendText('PONG :' + copy(idata,pos(':',idata) + 1,length(idata) - pos(':',idata)) + hex('0A'));
memo1.Text:=memo1.Text+'OUT: ' + 'PONG :' + copy(idata,pos(':',idata) + 1,length(idata) - pos(':',idata)) + hex('0A');
end;

memo1.SelLength := length(memo1.Text);
memo1.SelStart := length(memo1.Text);
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
clientsocket1.Socket.SendText('NICK Delphi-TestUser' + hex('0A'));
clientsocket1.Socket.SendText('USER Delphi "' + clientsocket1.Socket.LocalAddress + '" "' + clientsocket1.Socket.RemoteHost + '" :Delphi Test' + hex('0A'));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
with clientsocket1.Socket do
begin
  if lowercase(copy(edit3.Text,1,5)) = '/join' then
    begin
    sendtext('JOIN ' + copy(edit3.text,6,length(edit3.Text)  - 5) + hex('0A'));
    memo1.text:=memo1.Text + 'OUT: JOIN ' + copy(edit3.text,6,length(edit3.Text)  - 5) + #13 + #10;
    end
  else if lowercase(copy(edit3.Text,1,4)) = '/msg' then
    begin
    sendtext('PRIVMSG ' + copy(edit3.text,5,length(edit3.Text)  - 4) + hex('0A'));
    memo1.text:=memo1.Text + 'OUT: PRIVMSG ' + copy(edit3.text,6,length(edit3.Text)  - 4) + #13 + #10;
    end
  else
    begin
    sendtext(edit3.Text + hex('0A'));
    memo1.Text:=memo1.Text + 'OUT: ' + edit3.Text + #13 + #10;
    end;
end;

memo1.SelLength := length(memo1.Text);
memo1.SelStart := length(memo1.Text);
end;

end.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester