⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 delphi tcp/ip聊天系统 delphi tcp/ip聊天系统
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets, Buttons, ExtCtrls, ScktComp;

type
  TForm1 = class(TForm)
    Image1: TImage;
    SpeedButton1: TSpeedButton;
    Memo1: TMemo;
    Edit1: TEdit;
    ComboBox1: TComboBox;
    ListBox1: TListBox;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    Label1: TLabel;
    ClientSocket1: TClientSocket;
    ServerSocket1: TServerSocket;
    Label2: TLabel;
    Label3: TLabel;
    SpeedButton6: TSpeedButton;
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);

  
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1Accept(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure SpeedButton4Click(Sender: TObject);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure SpeedButton6Click(Sender: TObject);
    procedure ServerSocket1ClientWrite(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  NickName:string;//其中NickName用于放聊天人的名称,b_Client用于表明应用程序是否作为客户端进行数据传输 
  b_Client:boolean;
  Form1: TForm1;
  OldX,OldY:integer; //定义全局变量
implementation

{$R *.dfm}

procedure TForm1.SpeedButton5Click(Sender: TObject);
var 
n:string;
begin
if InputQuery('更改昵称','新昵称..',n) then
if Length(n)>0 then
NickName:=n;
label3.Caption:=n;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
ClientSocket1.close; 
ServerSocket1.close;
close;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
OldX:=x;
OldY:=y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if ssleft in shift then  //按下鼠标左键
    begin
      Form1.Left:=Form1.Left+x-Oldx;
      Form1.Top:=Form1.Top+y-Oldy;
    end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
edit1.SetFocus;
form1.Left:=trunc((screen.Width-form1.Width)/2);
form1.Top:=trunc((screen.Height-form1.Height)/2);
AnimateWindow(handle,100,aw_hor_negative+aw_activate+aw_center);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
NickName:='我的昵称';
b_Client:=true;
label1.Caption:='小强聊天系统测试版';
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
ClientSocket1.Close;
speedbutton3.Enabled:=false;
speedbutton2.Visible:=false;
speedbutton6.Visible:=true;
ServerSocket1.Open;
label1.Caption:='开始监听...';
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
var s:string;
begin
if ClientSocket1.Active then
ClientSocket1.Close;
if inputquery('连接到计算机','要连接的计算机IP地址:',s) then
if length(s)>0 then
with ClientSocket1 do
begin
host:=s;
open;
end;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if edit1.Text='' then
begin
 label1.Caption:='不能发空消息啊!~~';
end
else
if Key=VK_Return then
begin
Memo1.Lines.Add(NickName+'说:'+Edit1.Text);
if b_Client then
ClientSocket1.Socket.SendText(Memo1.Lines[Memo1.lines.Count-1])
else
ServerSocket1.Socket.Connections[0].SendText(Memo1.Lines[Memo1.lines.Count-1]);
edit1.Text:='';
label1.Caption:='';
end;
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 label1.Caption:='等待连接允许响应...'; 
end;

procedure TForm1.ServerSocket1Accept(Sender: TObject;
  Socket: TCustomWinSocket);
begin
b_Client:=false;
clientsocket1.Close;
serversocket1.Open;
label1.Caption:='连接到'+Socket.RemoteAddress;
listbox1.Items.Add(Socket.RemoteAddress);
combobox1.Items.Add(Socket.RemoteAddress);
speedbutton3.Enabled:=false;
NickName:='主机';
label3.Caption:='主机';
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
serversocket1.Close;
clientsocket1.Open;
b_Client:=true;
label1.Caption:='连接成功';
listbox1.Items.Add(Socket.LocalAddress);
speedbutton2.Enabled:=false;
speedbutton3.Enabled:=false;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.lines.Add(Socket.ReceiveText);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.lines.Add(Socket.ReceiveText);
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
ClientSocket1.close;
listbox1.Clear;
label1.Caption:='断开连接';
speedbutton2.Enabled:=true;
speedbutton3.Enabled:=true;
speedbutton2.Visible:=true;
speedbutton6.Visible:=false;
if   b_Client=false then
ServerSocket1.Close;
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
label1.Caption:='断开'+Socket.LocalAddress+'的连接';
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
listbox1.Items.Clear;
ClientSocket1.close;
listbox1.Clear;
label1.Caption:='断开连接';
speedbutton2.Enabled:=true;
speedbutton3.Enabled:=true;
speedbutton2.Visible:=true;
speedbutton6.Visible:=false;
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
ClientSocket1.Close;
speedbutton3.Enabled:=true;
speedbutton2.Visible:=true;
speedbutton6.Visible:=false;
ServerSocket1.Close;
label1.Caption:='';
end;


procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.lines.Add(Socket.ReceiveText);
end;



end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -