最简单的TTcpServer与TTcpClient通信实例-Delphi_海盗船长_新浪博客
http://blog.sina.com.cn/s/blog_5383794d0100nt9u.html

delphi TTcpClient TTcpServer分析 - 沧海一粟 - 博客频道 - CSDN.NET
http://blog.csdn.net/andrew57/article/details/8767308

用TTcpClient和TTcpServer进行文件的传输 - 好记性不如烂笔头 - 博客频道 - CSDN.NET
http://blog.csdn.net/onebigday/article/details/5425028

再说“用TTcpClient和TTcpServer进行文件的传输” - 好记性不如烂笔头 - 博客频道 - CSDN.NET
http://blog.csdn.net/onebigday/article/details/5612612

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdTCPConnection, IdTCPClient, Sockets, IdTCPServer, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, StdCtrls; type
TFrmMain = class(TForm)
TcpServer1: TTcpServer;
TcpClient1: TTcpClient;
Button1: TButton;
Button2: TButton;
Mserver: TMemo;
MClient: TMemo;
Edit1: TEdit;
btn1: TButton;
btn2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
procedure btn1Click(Sender: TObject);
procedure TcpClient1Receive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer);
procedure btn2Click(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 //死循环!必须的!!!
if not Terminated then
MClient.Lines.Add(TcpClient1.Receiveln) //一条条读进来
// TcpClient1.Receiveln
else
Break;
end;
end;
procedure TFrmMain.Button1Click(Sender: TObject);
begin
//连接服务器,如果成功创建客户端接收线程
if TcpClient1.Connect and (not Assigned(ClientReceiveThread)) then
ClientReceiveThread := TClientReceiveThread.Create(false);
end; procedure TFrmMain.Button2Click(Sender: TObject);
begin
TcpClient1.Sendln(Edit1.Text);
end; //TcpServer1的OnAccept事件
procedure TFrmMain.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
var
s1, s2: string;
begin
while ClientSocket.connected do //死循环!必须的!!! 此函数貌似只触发一次,连接时
begin
s1 := ClientSocket.Receiveln; //收 如果没有值不会返回来,相当于停在这里了; 阻塞
MServer.Lines.Add('收到客户端的 ' + s1);
//s2 := DateTimeToStr(Now);
if ClientSocket.connected then
ClientSocket.Sendln(DateTimeToStr(Now) + '服务端已经收到 ' + s1); //发
//Application.ProcessMessages; 此处没有必要
end;
end; procedure TFrmMain.btn1Click(Sender: TObject);
begin
TcpClient1.Disconnect;
end; procedure TFrmMain.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer); //只有调用读操作时才会触发此函数
begin
// MClient.Lines.Add('fdafdfda');
//MClient.Lines.
// MClient.Lines.Add(Buf);
//MClient.SetTextBuf(Buf);
//MClient.Lines.SetText(Buf);
//MClient.GetTextBuf(Buf,DataLen);
end; procedure TFrmMain.btn2Click(Sender: TObject);
begin
ClientReceiveThread.Terminate;
end; end.
object FrmMain: TFrmMain
Left =
Top =
Width =
Height =
Caption = 'FrmMain'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch =
TextHeight =
object Button1: TButton
Left =
Top =
Width =
Height =
Caption = '创建线程'
TabOrder =
OnClick = Button1Click
end
object Button2: TButton
Left =
Top =
Width =
Height =
Caption = '发送信息'
TabOrder =
OnClick = Button2Click
end
object Mserver: TMemo
Left =
Top =
Width =
Height =
Lines.Strings = (
'Mserver')
ScrollBars = ssBoth
TabOrder =
end
object MClient: TMemo
Left =
Top =
Width =
Height =
Lines.Strings = (
'MClient')
ScrollBars = ssBoth
TabOrder =
end
object Edit1: TEdit
Left =
Top =
Width =
Height =
TabOrder =
Text = 'Edit1'
end
object btn1: TButton
Left =
Top =
Width =
Height =
Caption = '停止客户端tcp'
TabOrder =
OnClick = btn1Click
end
object btn2: TButton
Left =
Top =
Width =
Height =
Caption = '关闭线程'
TabOrder =
OnClick = btn2Click
end
object TcpServer1: TTcpServer
Active = True
LocalHost = '127.0.0.1'
LocalPort = ''
OnAccept = TcpServer1Accept
Top =
end
object TcpClient1: TTcpClient
Active = True
RemoteHost = '127.0.0.1'
RemotePort = ''
OnReceive = TcpClient1Receive
Left =
end
end

窗体代码

delphi-TTcpServer与TTcpClient的更多相关文章

  1. 最简单的TTcpServer与TTcpClient通信实例-Delphi

    unit TcpSCDemo;//最简单的TTcpServer与TTcpClient通信实例-Delphi //Borland推出TTcpServer与TTcpClient作为主要的网络通信控件,意味 ...

  2. Delphi / C++ Builder 使用 UDT ( UDP-based Data Transfer ) 4.11

    添加 src/*.cpp 到工程, 修改 Directories and Conditionals, 添加 WIN32 UDT_EXPORTS udt.h 需要 #pragma link " ...

  3. delphi TTcpClient TTcpServer分析(转)

    delphi TTcpClient TTcpServer分析(转) 只描述windows socket部分. sockets.pas中各个类得继承关系: TBaseSocket | --------- ...

  4. 用TTcpClient和TTcpServer进行文件的传输

    发送数据时有Sendln,SendBuf,SendStream.接收数据时有Receiveln,ReceiveBuf,当时我很奇怪为什么没有ReceiveStream.因为很自然的想到是对应关系的.但 ...

  5. 转:Delphi各种Socket组件的模式和模型

    Delphi的大多数书籍里面都没有提到delphi的各种socket通信组件的模式和模型,有的书只讲解了windows的socket模式和模型,并没有归纳各种组件采用的模型,所以我们的程序员并不知道如 ...

  6. Delphi 7 里没有加载的控件

    在原来版本如D5.D6中使用的控件如Quickrep,FastNet等,在D7中仍然是保留的.只是Delphi没有将他们默认的安装到组件面版中来.这些控件包全部保存在Delphi目录的bin下,文件扩 ...

  7. Delphi各种Socket组件的模式和模型

    Delphi各种Socket组件的模式和模型 Delphi的大多数书籍里面都没有提到delphi的各种socket通信组件的模式和模型,有的书只讲解了windows的socket模式和模型,并没有归纳 ...

  8. Delphi中各个包中包含的控件

    经常有朋友提这样的问题,“我原来在delphi5或者delphi6中用的很熟的控件到哪里去了?是不是在delphi7中没有了呢?这是不是意味着我以前写的代码全都不能够移植到delphi7中来了呢?是不 ...

  9. delphi : 取得网页源码内容

    取得网页的源码内容的函数以及调用方法供大家参考: program geturl; uses wininet, windows; //取网页内容 function StrPas(const Str: P ...

随机推荐

  1. iOS程序的启动执行顺序

    1 程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2  程序完成加载 -[AppDelegate application:didFinishLaunchingWithOpt ...

  2. BZOJ3729Gty的游戏——阶梯博弈+巴什博弈+非旋转treap(平衡树动态维护dfs序)

    题目描述 某一天gty在与他的妹子玩游戏.妹子提出一个游戏,给定一棵有根树,每个节点有一些石子,每次可以将不多于L的石子移动到父节点,询问将某个节点的子树中的石子移动到这个节点先手是否有必胜策略.gt ...

  3. 注册页面手机验证码无跳转接收[html+js+ajax+php]

    [学习笔记] 来源:注册时需要使用短信验证码,但是注册的时候,点击接收验证码时,会产生跳转(尼玛,这不是我想要的啊!o(╥﹏╥)o) 查询资料和看书之后,知道使用js+ajax可以实现,就从网上找了一 ...

  4. Redundant Paths POJ - 3177(边—双连通分量)

    题意: 在图中加边 看最少能通过加多少条边把 图变成边—双连通分量 解析: 先做一次dfs,不同的连通分量的low是不同的  注意重边 缩点 统计度为1的点  那么需要加的边为(ret+1)/2 #i ...

  5. 洛谷 P4148 简单题 解题报告

    P4148 简单题 题意 维护单点加与矩形求和,强制在线 说明 \(n\le 500000,m\le 200000\),\(4000ms / 20MB\) kd-tree 复杂度我不懂 是一颗平衡树, ...

  6. luogu1600 [NOIp2016]天天爱跑步 (tarjanLca+dfs)

    经过部分分的提示,我们可以把一条路径切成s到lca 和lca到t的链 这样就分为向上的链和向下的链,我们分开考虑: 向上:如果某一个链i可以对点x产生贡献,那么有deep[x]+w[x]=deep[S ...

  7. 【模板】堆优化Dijkstra

    Dij的核心思想:全局最小值不会被其他节点更新,因此得到最小值后只需要扩展一次即可. 概念:扩展.出队 注意:vis[ ]数组表示的是每个节点是否扩展过,因此开始时vis[st]不置1. 时间复杂度\ ...

  8. qsort代码(pascal/c/c++)与思想及扩展(随机化,TopK)

    1.快速排序思想:从一堆数A中找到一个数x,然后把这堆数x分成两堆B,C,B堆的数小于(或小于等于)该数,放在左边,C堆的数大于(或大于等于)该数,放在右边,有可能把该数x单独分开,放在中间.然后对小 ...

  9. Codeforce Div-2 985 C. Liebig's Barrels

    http://codeforces.com/contest/985/problem/C C. Liebig's Barrels time limit per test 2 seconds memory ...

  10. 二叉查找树(BST)、平衡二叉树(AVL树)

    二叉查找树(BST) 特殊的二叉树,又称为排序二叉树.二叉搜索树.二叉排序树. 二叉查找树实际上是数据域有序的二叉树,即对树上的每个结点,都满足其左子树上所有结点的数据域均小于或等于根结点的数据域,右 ...