最簡單的TTcpServer與TTcpClient通信實例-Delphi


unit TcpSCDemo;
//最簡單的TTcpServer與TTcpClient通信實例-Delphi

//Borland推出TTcpServer與TTcpClient作為主要的網絡通信控件,意味着這兩個控件有很大的優越性,
//但是有關這兩個控件的資料非常少見,很多人都在問一個相同的問題:TcpServer怎么樣向TcpClient發送數據?
//網上的回答千奇百怪,歸納起來有三種:
//1.參考delphi自帶的netchat.例子中TcpServer只收不發,答題得分0.
//2.用indy或者ServerSocket/ClientSocket來說事.牛頭不對馬嘴,答題得分0.
//3.建議使用indy或者ServerSocket/ClientSocket,有道理,也管用,但是回答的不是正題,答題得分59.
//今天我要給出的例子就是用TTcpServer與TTcpClient進行雙向通信,相信看過以后就會,答題得分99.
//為什么不是100呢?因為太簡單!

interface

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

type
//工作流程:
//程序運行后點[連接]連接TcpClient和TcpServer
//點[發送]將edit1中的文本發送到TcpServer,TcpServer接收到以后添加到Mserver,並回復一條消息.
//TcpClient1收到TcpServer回復的消息后添加到TcpServer
//所有控件都說到了吧?Let's Go!
TFrmMain = class(TForm)
Edit1: TEdit;
Button1: TButton; //連接
Button2: TButton; //發送
Mserver: TMemo;
MClient: TMemo;
TcpServer1: TTcpServer; //active:=True;host:=127.0.0.1;port:=2011;其它默認值
TcpClient1: TTcpClient; //remotehost:=127.0.0.1;remoteport:=2011;其它默認值
procedure TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

//這個類實現TTcpClient接收TTcpserver回復的消息
TClientReceiveThread = class(TThread)
procedure Execute; override;
end;

var
FrmMain: TFrmMain;
ClientReceiveThread: TClientReceiveThread;

implementation

{$R *.dfm}

procedure TClientReceiveThread.Execute;
begin
with FrmMain do
begin
while TcpClient1.Connected do //死循環!必須的!!!
MClient.Lines.Add(TcpClient1.Receiveln);
end;
end;

//TcpServer1的OnAccept事件
procedure TFrmMain.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
s: String;
begin
while ClientSocket.connected do //死循環!必須的!!!
begin
s := ClientSocket.Receiveln; //收
MServer.Lines.Add(s);
s := DateTimeToStr(Now);
ClientSocket.Sendln(s); //發
end;
end;

procedure TFrmMain.Button1Click(Sender: TObject);
begin
//連接服務器,如果成功創建客戶端接收線程
if TcpClient1.Connect then ClientReceiveThread := TClientReceiveThread.Create(false);
end;

procedure TFrmMain.Button2Click(Sender: TObject);
begin
TcpClient1.Sendln(Edit1.Text);
end;

//真的很簡單,最后一句話:
end.


免責聲明!

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



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