|
TCP通讯 由于delphi的SOCKET组件在默认的情况下是没有被添加大组件库中的,如果你没有使用过SOCKET组件,在打开时就会提示TClientSocket或TServerSocket等控件没有被声明而不能编译通过; 解决办法: 添加组件草开发环境里面component->install package->add->"C:\Program Files\Borland\Delphi7\Bin\dclsockets70.bpl" 添加后在组件Internet页面可以看到TSocketClient和TSocketServer控件 客户端TSocketClient需要映射连接OnConnect、断开OnDisconnect及读取OnRead消息三个事件,服务器端TSocketServer也需要对应的映射监控是否有客户端连接上的OnClientConnect事件,客户端断开OnClientDisconnect事件及读取客户端数据的OnClientRead 服务器端TSocketServer只需提供客户端的连接端口ServerSocket.Port,然后打开ServerSocket.Open();就可以供客户端连接了;然后那三个事件就分别来处理连接时,断开时,及读取消息时的事件; procedure TForm1.OnClientConnect(Sender: TObject; Socket: TCustomWinSocket); 这里Socket就是连接上的套接字,通过它可以获取远程客户端IP及端口,分别是Socket.RemoteAddress和Socket.Port;
procedure TForm1.OnClientDisconnect(Sender: TObject;
procedure TForm1.OnClientRead(Sender: TObject; Socket: TCustomWinSocket); 用该事件来接收客户端发来的数据,Socket.ReceiveText,是以字符串形式接收的,当然发送也是以字符串形式发送的CustomWinSocket[Socket].SendText(string);这里的CustomWinSocket就是定义的TCustomWinSocket类,当然在实际应用过程中接收和发送数据都要有一定的规范,所以要掌握一些字符串和数组,字节之间的转换。 我们使用TServerSocket组件来建立服务器端的程序。 它包含两个memo组件,用来分别处理接收到的数据和发送的数据,然后再在窗体上方一个TServerSocket组件,ServerType设置为stNonBlocking,Port设置为100,active设置为true,写几句简单的代码如下: { 作者:wudi_1982 联系方式:wudi_1982@hotmail.com 转载请著名出处 } unit Unit1;![]() interface![]() uses Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ScktComp;![]() type TForm1 = class(TForm) ServerSocket1: TServerSocket; Memo1: TMemo; Button1: TButton; StatusBar1: TStatusBar; Memo2: TMemo; procedure ServerSocket1ClientConnect(Sender:
TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientDisconnect(Sender:
TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure Button1Click(Sender: TObject); private {
Private declarations } public {
Public declarations } end;![]() var Form1: TForm1;![]() implementation![]() {$R *.dfm}![]() procedure TForm1.ServerSocket1ClientConnect(Sender:
TObject; Socket: TCustomWinSocket); begin StatusBar1.SimpleText := 'connect'; end;![]() procedure TForm1.ServerSocket1ClientDisconnect(Sender:
TObject; Socket: TCustomWinSocket); begin StatusBar1.SimpleText := 'disconnect'; end;![]() procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add( Socket.ReceiveText); end;![]() procedure TForm1.Button1Click(Sender: TObject); begin if ServerSocket1.Active
then ServerSocket1.Socket.Connections[0].SendText(Memo2.Text); end;![]() end.![]() 然后编译程序。
客户端实现: { 作者:wudi_1982 联系方式:wudi_1982@hotmail.com 转载请著名出处 } unit Unit1;![]() interface![]() uses Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ScktComp;![]() type TForm1 = class(TForm) ClientSocket1: TClientSocket; edIp: TEdit; Label1: TLabel; Label2: TLabel; edPort: TEdit; StatusBar1: TStatusBar; Memo1: TMemo; btnConnect: TButton; btnSent: TButton; btnDisconnect: TButton; Memo2: TMemo; procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure btnConnectClick(Sender: TObject); procedure btnDisconnectClick(Sender: TObject); procedure btnSentClick(Sender: TObject); procedure ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket); private {
Private declarations } public {
Public declarations } end;![]() var Form1: TForm1;![]() implementation![]() {$R *.dfm}![]() procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin StatusBar1.SimpleText := '连接成功'; end;![]() procedure TForm1.btnConnectClick(Sender: TObject); begin if not
ClientSocket1.Active then begin ClientSocket1.Host := edIp.Text; ClientSocket1.Port := StrToInt(edPort.Text); ClientSocket1.Open; (Sender as TButton).Enabled
:= false; btnDisconnect.Enabled := true; end; end;![]() procedure TForm1.btnDisconnectClick(Sender: TObject); begin if ClientSocket1.Active
then begin ClientSocket1.Close; btnDisconnect.Enabled := false; btnConnect.Enabled := true;![]() end; end;![]() procedure TForm1.btnSentClick(Sender: TObject); begin if ClientSocket1.Active
then ClientSocket1.Socket.SendText(Memo1.Text) end;![]() procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin Memo2.Lines.Add(Socket.ReceiveText); end;![]() end |
delphi7 winsock
最新推荐文章于 2025-09-08 15:30:10 发布
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
PyTorch 2.6
PyTorch
Cuda
PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

作者:wudi_1982
}
unit Unit1;
2670

被折叠的 条评论
为什么被折叠?



