2017-02-24 3 views
0

Pour une raison quelconque, si j'envoie un message via le client, je l'ai fait automatiquement le nom d'utilisateur "license.embarcadero.com:", donc si j'envoie un msg du client sur le serveur il sort comme "license.embarcadero.com: (msg)"(Delphi) Changer le nom du client Socket lors de l'envoi d'un message

Comment puis-je changer license.embarcadero.com: à tout ce que je veux. Si elle aide que je utilise la mise à jour berlin 2

Screenshot

est ici la source du client: (J'utilise le StyleManager pour l'ui)

unit uClient; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, 
    System.Win.ScktComp; 

type 
    TForm1 = class(TForm) 
    pnl1: TPanel; 
    grp1: TGroupBox; 
    grp2: TGroupBox; 
    mmochat: TMemo; 
    edtchat: TEdit; 
    btnsend: TButton; 
    lbl1: TLabel; 
    edtip: TEdit; 
    lbl2: TLabel; 
    edtport: TEdit; 
    btnconnect: TButton; 
    lblstatus: TLabel; 
    clntsckt1: TClientSocket; 
    procedure btnconnectClick(Sender: TObject); 
    procedure clntsckt1Connect(Sender: TObject; Socket: TCustomWinSocket); 
    procedure clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket); 
    procedure clntsckt1Disconnect(Sender: TObject; Socket: TCustomWinSocket); 
    procedure btnsendClick(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.btnsendClick(Sender: TObject); 
begin 
    clntsckt1.Socket.SendText(edtchat.Text); 
    mmochat.Lines.Add('Me: ' + edtchat.Text); 
end; 

procedure TForm1.btnconnectClick(Sender: TObject); 
begin 
    edtip.Enabled := False; 
    edtport.Enabled := False; 
    btnconnect.Enabled := False; 

    clntsckt1.Host := edtip.Text; 
    clntsckt1.Port := StrToInt(edtport.Text); 
    clntsckt1.Active := True; 
end; 

procedure TForm1.clntsckt1Connect(Sender: TObject; Socket: TCustomWinSocket); 
begin 
    mmochat.Clear; 
end; 

procedure TForm1.clntsckt1Disconnect(Sender: TObject; Socket: TCustomWinSocket); 
begin 
    lblstatus.Caption := 'Disconnected...'; 
end; 

procedure TForm1.clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket); 
begin 
    mmochat.Lines.Add(clntsckt1.Socket.ReceiveText); 
end; 

end. 

est ici la source du serveur: (I utiliser le StyleManager pour l'ui)

unit uServer; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, 
    System.Win.ScktComp, Vcl.ComCtrls; 

type 
    TForm1 = class(TForm) 
    pnl1: TPanel; 
    grp1: TGroupBox; 
    mmochat: TMemo; 
    grp2: TGroupBox; 
    lbl1: TLabel; 
    edtport: TEdit; 
    lbl2: TLabel; 
    lbl3: TLabel; 
    edtstatus: TEdit; 
    btnlisten: TButton; 
    srvrsckt1: TServerSocket; 
    btnstop: TButton; 
    lst1: TListBox; 
    edtchat: TEdit; 
    btnsend: TButton; 
    procedure btnlistenClick(Sender: TObject); 
    procedure srvrsckt1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); 
    procedure btnstopClick(Sender: TObject); 
    procedure btnsendClick(Sender: TObject); 
    procedure srvrsckt1ClientRead(Sender: TObject; Socket: TCustomWinSocket); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.btnsendClick(Sender: TObject); 
begin 
    srvrsckt1.Socket.Connections[0].SendText('server: ' + edtchat.Text); 
    mmochat.Lines.Add('server: ' + edtchat.Text); 
    edtchat.Clear; 
end; 

procedure TForm1.btnlistenClick(Sender: TObject); 
var 
    port : Integer; 
begin 
    btnlisten.Enabled := False; 
    btnstop.Enabled := True; 
    edtport.Enabled := False; 

    port := StrToInt(edtport.Text); 
    srvrsckt1.Port := port; 
    srvrsckt1.Active := True; 
    edtstatus.Text := 'Listening...'; 
end; 

procedure TForm1.btnstopClick(Sender: TObject); 
begin 
    btnlisten.Enabled := True; 
    btnstop.Enabled := False; 
    edtport.Enabled := True; 

    srvrsckt1.Active := False; 
    edtstatus.Text := 'Stopped Listening...'; 
end; 

procedure TForm1.srvrsckt1ClientConnect(Sender: TObject; 
    Socket: TCustomWinSocket); 
begin 
    lst1.Items.Add(Socket.RemoteHost + ' ' + Socket.RemoteAddress); 
end; 

procedure TForm1.srvrsckt1ClientRead(Sender: TObject; Socket: TCustomWinSocket); 
begin 
    mmochat.Lines.Add(Socket.RemoteHost + ': ' + Socket.ReceiveText); 
end; 

end. 
+1

personne ne peut y répondre. Nous ne pouvons pas voir votre code, ni savoir quoi que ce soit sur la façon dont votre client et votre serveur communiquent, ou sur le fonctionnement de vos interfaces utilisateur ou sur ce que vous avez modifié pour les supprimer. –

+0

Je l'ai mis à jour. Merci pour l'info – Newb101

+0

Quelle adresse IP obtenez-vous pour license.embarcadero.com? – mjn

Répondre

2

dans la capture d'écran la fenêtre « utilisateurs connectés » dans le coin inférieur droit montre

license.embarcadero.com 127.0.0.1 

Je suppose donc votre fichier hosts contient une entrée comme

127.0.0.1 license.embarcadero.com 

Le socket serveur effectue une recherche inversée DNS pour l'adresse IP de la connexion entrante et affiche le nom associé, ce qui est permis. embarcadero.com

Il s'agit donc d'un problème uniquement pour les connexions localhost. Les clients sur un autre ordinateur ne s'afficheront pas avec le même nom de serveur.

+0

Merci pour cela. Est-il possible de changer le nom? Parce qu'actuellement, il utilise le nom d'ordinateur – Newb101

+1

@ Newb101, vous affichez actuellement le 'RemoteHost' de l'homologue, qui est le nom d'hôte que résout l'adresse IP de l'homologue. Si vous voulez afficher quelque chose d'autre, alors faites-le. Rien ne vous empêche d'utiliser autre chose que 'RemoteHost'. Par exemple, demandez à chaque client d'envoyer un nom d'utilisateur immédiatement après la connexion, de le stocker dans la propriété TCustomWinSocket.Data et de l'afficher sur chaque message reçu. –