delphi-TTcpServer与TTcpClient
最简单的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的更多相关文章
- 最简单的TTcpServer与TTcpClient通信实例-Delphi
unit TcpSCDemo;//最简单的TTcpServer与TTcpClient通信实例-Delphi //Borland推出TTcpServer与TTcpClient作为主要的网络通信控件,意味 ...
- Delphi / C++ Builder 使用 UDT ( UDP-based Data Transfer ) 4.11
添加 src/*.cpp 到工程, 修改 Directories and Conditionals, 添加 WIN32 UDT_EXPORTS udt.h 需要 #pragma link " ...
- delphi TTcpClient TTcpServer分析(转)
delphi TTcpClient TTcpServer分析(转) 只描述windows socket部分. sockets.pas中各个类得继承关系: TBaseSocket | --------- ...
- 用TTcpClient和TTcpServer进行文件的传输
发送数据时有Sendln,SendBuf,SendStream.接收数据时有Receiveln,ReceiveBuf,当时我很奇怪为什么没有ReceiveStream.因为很自然的想到是对应关系的.但 ...
- 转:Delphi各种Socket组件的模式和模型
Delphi的大多数书籍里面都没有提到delphi的各种socket通信组件的模式和模型,有的书只讲解了windows的socket模式和模型,并没有归纳各种组件采用的模型,所以我们的程序员并不知道如 ...
- Delphi 7 里没有加载的控件
在原来版本如D5.D6中使用的控件如Quickrep,FastNet等,在D7中仍然是保留的.只是Delphi没有将他们默认的安装到组件面版中来.这些控件包全部保存在Delphi目录的bin下,文件扩 ...
- Delphi各种Socket组件的模式和模型
Delphi各种Socket组件的模式和模型 Delphi的大多数书籍里面都没有提到delphi的各种socket通信组件的模式和模型,有的书只讲解了windows的socket模式和模型,并没有归纳 ...
- Delphi中各个包中包含的控件
经常有朋友提这样的问题,“我原来在delphi5或者delphi6中用的很熟的控件到哪里去了?是不是在delphi7中没有了呢?这是不是意味着我以前写的代码全都不能够移植到delphi7中来了呢?是不 ...
- delphi : 取得网页源码内容
取得网页的源码内容的函数以及调用方法供大家参考: program geturl; uses wininet, windows; //取网页内容 function StrPas(const Str: P ...
随机推荐
- mysql 创建表指定 字符类型与存储引擎
DROP TABLE IF EXISTS apilog; /*==============================================================*/ /* T ...
- BZOJ3526[Poi2014]Card——线段树合并
题目描述 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的卡片了!第i个熊孩子会交换c[i]和d[i]两个位置上的卡片. ...
- AC自动机-HDU2222-模板题
http://acm.hdu.edu.cn/showproblem.php?pid=2222 一个AC自动机的模板题.用的kuangbin的模板,静态建Trie树.可能遇到MLE的情况要转动态建树. ...
- MT【36】反函数有关的一道题
解答:$\frac{7}{2}$ 做适当的变换,再令$x-1=t$容易划归到我们熟悉的题型,$2^t=\frac{3}{2}-t,log_2t=\frac{3}{2}-t$作图或者利用函数单调性可得$ ...
- Codeforces Round #487 (Div. 2) E. A Trance of Nightfall (矩阵优化)
题意 有一个平面 , 给你 \(n\) 个点构成一个点集 \(S\) , 一开始可以选择一个平面上任意点 \(P\) . 存在一种操作 : 1 选择一条至少 通过 \(S\) 中任意两个点以及 \(P ...
- redis中的数据类型
redis不是一个纯文本kv存储,实际上,它是一个数据结构服务,支持不同类型的value. 包含以下类型: 1.Binary-safe strings. 二进制安全的字符串 2.Lists: coll ...
- P3507 GRA-The Minima Game
题目大意: 给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况 ...
- 【POJ3017】Cut the Sequence
题目大意:给定一个长度为 N 的序列,将序列划分成若干段,保证每段之和不超过 M,问所有段的最大值之和最小是多少. 题解:设 \(f[i]\) 表示前 i 个数满足上述条件的最优解,显然有状态转移方程 ...
- (转)JVM——Java虚拟机架构
背景:最近开始忙着找工作了,把需要储备的知识再整理总结一遍!关于JVM的总结,是转自下面的连接.结合<深入理解java虚拟机>,看起来有更清晰的认识. 转载自:http://blog.cs ...
- double
看double精度 和 数字经过计算后的最小精度