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 ...
随机推荐
- Threed.sleep是不会释放锁,而wait是释放锁的(对象锁)
实战分析 一直都说,Threed.sleep是不会释放锁,而wait是释放锁的(对象锁),现理论上来分析一下啊. v package thread.concurrent; public class D ...
- 自学huawei之路-AC6005版本升级步骤
返回自学Huawei之路 自学huawei之路-AC6005版本升级步骤 本文主要采用WEB网管界面升级,方便快捷,推荐使用此方法. 一.升级前检查 1.1 原AC/AP设备版本确认 disp ...
- codeforces 793B - Igor and his way to work(dfs、bfs)
题目链接:http://codeforces.com/problemset/problem/793/B 题目大意:告诉你起点和终点,要求你在只能转弯两次的情况下能不能到达终点.能就输出“YES”,不能 ...
- A1031. Hello World for U
Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. ...
- 关于next.js中的css
css进行了全局和局部的限制 export default () => ( <div className='hello'> <p>Hello World</p> ...
- spring 项目分开发和生产环境
1.pom 文件修改 <profile> <!-- 本地开发环境 --> <id>dev</id> <properties> <pro ...
- terminal下历史命令自动完成功能history auto complete
CentOS下,有一个很智能的功能,就是只输入一条历史命令的前几个字母,再按PageUp和PageDown键,就可以在以此字母为前缀的历史命令中上下切换.这个功能非常实用,而且比CTRL+R使用起来更 ...
- shell中的循环语法
shell中的循环语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.for循环 1.语法格式1 for 变量 in 值1 值2 值3 ... do ...
- GUI之ScrollView的使用
ScrollView ScrollView是unity提供的一个方便的滚动视图. 组成 ScrollView由四个部分组成: ViewPort 和 Content ScrollView: 视图范围,C ...
- Jupyter 魔术命令(magic commands)
自动重新加载更改的模块 命令参数如下所示: %autoreload: 自动重载%aimport排除的模块之外的所有模块. %autoreload 0: 禁用自动重载 %autoreload 1: 自动 ...