(Delphi)发送消息时更改套接字客户端名称
由于某种原因,如果我通过客户端发送msg消息,我会自动将用户名“license.embarcadero.com:”广告给它,所以如果发送了msg消息客户端到服务器它出来作为“license.embarcadero.com:(味精)”(Delphi)发送消息时更改套接字客户端名称
我如何更改license.embarcadero.com:我想要什么。 如果它有助于我使用柏林更新2
下面是客户端源:(我使用的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.
在截图中的“连接用户”窗口的右下角显示
license.embarcadero.com 127.0.0.1
所以我假设你hosts文件包含像
127.0.0.1 license.embarcadero.com
套接字服务器对传入连接的IP地址反向DNS查找并显示相关的名称,这是许可的条目。 embarcadero.com
所以这只是本地连接的问题。不同计算机上的客户端不会显示相同的服务器名称。
谢谢你。是否可以更改名称?由于目前它使用计算机名称 – Newb101
@ Newb101,因此您正在显示对等方的“RemoteHost”,它是对等方的IP地址解析到的主机名。如果你想展示别的东西,那么就这样做。没有什么能够阻止你使用“RemoteHost”以外的其他任何东西。例如,让每个客户端在连接后立即发送用户名,将其存储在'TCustomWinSocket.Data'属性中,并将其显示在每条收到的消息上。 –
有没有办法任何人都可以回答这个问题。我们看不到您的代码,或者不了解您的客户端和服务器如何通信,或者您的用户界面如何工作,或者您改变了什么以打破它们。 –
我更新了它。 thx的信息 – Newb101
您获得license.embarcadero.com的哪个IP地址? – mjn