2017-02-24 168 views
0

由于某种原因,如果我通过客户端发送msg消息,我会自动将用户名“license.embarcadero.com:”广告给它,所以如果发送了msg消息客户端到服务器它出来作为“license.embarcadero.com:(味精)”(Delphi)发送消息时更改套接字客户端名称

我如何更改license.embarcadero.com:我想要什么。 如果它有助于我使用柏林更新2

Screenshot

下面是客户端源:(我使用的StyleManager对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. 

这里是服务器源:(我使用该UI的StyleManager中)

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

有没有办法任何人都可以回答这个问题。我们看不到您的代码,或者不了解您的客户端和服务器如何通信,或者您的用户界面如何工作,或者您改变了什么以打破它们。 –

+0

我更新了它。 thx的信息 – Newb101

+0

您获得license.embarcadero.com的哪个IP地址? – mjn

回答

2

在截图中的“连接用户”窗口的右下角显示

license.embarcadero.com 127.0.0.1 

所以我假设你hosts文件包含像

127.0.0.1 license.embarcadero.com 

套接字服务器对传入连接的IP地址反向DNS查找并显示相关的名称,这是许可的条目。 embarcadero.com

所以这只是本地连接的问题。不同计算机上的客户端不会显示相同的服务器名称。

+0

谢谢你。是否可以更改名称?由于目前它使用计算机名称 – Newb101

+1

@ Newb101,因此您正在显示对等方的“RemoteHost”,它是对等方的IP地址解析到的主机名。如果你想展示别的东西,那么就这样做。没有什么能够阻止你使用“RemoteHost”以外的其他任何东西。例如,让每个客户端在连接后立即发送用户名,将其存储在'TCustomWinSocket.Data'属性中,并将其显示在每条收到的消息上。 –

相关问题