通過ClientSocket 與 ServerSocket實現簡單的聊天功能.


代碼清單:

以下程序同時扮演了客戶端與服務端.

添加一個button,兩個Edit,一個ClientSocket,一個ServerSocket.

-------------------------------------------------------------------------------------------------------------------------------------------------------

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Edit1: TEdit;
    Button1: TButton;
    ServerSocket1: TServerSocket;
    Edit2: TEdit;
    Button2: TButton;
    procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

procedure TForm1.Button1Click(Sender: TObject); //OnClick事件

begin
  ClientSocket1.Open; //打開ClientSocket,並連接服務端.
end;

 

procedure TForm1.ClientSocket1Connect(Sender: TObject;Socket: TCustomWinSocket); //OnConnect事件
begin
    ClientSocket1.Socket.SendText(Edit1.Text);  //把Edit1中的消息發送給服務端.
  ShowMessage('成功連接.');
    ClientSocket1.Close;   //完成后關閉連接.
end;

 

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;Socket: TCustomWinSocket); //OnClientRead事件
begin
  Edit2.Text := Socket.ReceiveText;  //服務端接收到由客戶端發來的消息,並且顯示在Edit2上.
end;

end.

---------------------------------------------------------------------------------------------------------------------------------------------------------------

現在說說ClientSocket和ServerSocket的幾個重要屬性.

  ClientSocket :

                     1. Active   Boolean型屬性,為真時便是打開端口與服務器連接(等同於ClientSocket.Open),為假時就斷開與服務器的連接(等同於ClientSocket.Close).

                     2.Address String型屬性,你要連接的IP地址.

                     3.ClientType  連接方式, ctNonBlocking表示無阻斷方式.ctBlocking表示以阻斷方式連接.

                     4.Host  String型屬性,你要連接的域名,如果Host與Address同時設置了,那么默認選擇Host的參數.

                     5.Prot 整型屬性, 你要使用的端口號,不能使用已經被占用的端口號.

                     6.SerVice String類型屬性,設置常用的端口號,例如http ftp 等等. 如果同時設置了Prot屬性,那么默認選擇Service的參數.

 

ServerSocket :

                      1.  Active 等於ClientSocket的屬性意思.

                      2. Prot 等於ClientSocket的屬性意思.

                      3. ServerType 等於ClientSocket的屬性意思.

                      4. Prot 等於ClientSocket的屬性意思.

                      5. Service 等於ClientSocket的屬性意思.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM