使用了2个组建:

TServerSocket

TClientSocket

------------------TServerSocket---------------------------

//开启连接

ServerSocket1.Port := 9000;
ServerSocket1.Active := true;

//接收客户端发送的消息。对应事件:OnClientRead

Socket.ReceiveText

//发送消息给客户端。

ServerSocket1.Socket.Connections[0].SendText(Edit1.Text);

----------------------TClientSocket---------------------------------------

//连接服务端

ClientSocket1.Host := '127.0.0.1';
ClientSocket1.Port := 9000;

ClientSocket1.Active := true;

//接受服务端发送的消息 。对应事件:OnRead

str := Socket.ReceiveText

//发送消息给服务端。

ClientSocket1.Socket.SendText(Edit1.Text);

下面为完整代码:

unit Client;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, ExtCtrls, Sockets; type
TFrmClient = class(TForm)
ClientSocket1: TClientSocket;
Memo1: TMemo;
Panel1: TPanel;
Label2: TLabel;
Edit2: TEdit;
Button2: TButton;
Panel2: TPanel;
Label1: TLabel;
Button1: TButton;
Edit1: TEdit;
Label3: TLabel;
Edit3: TEdit; procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); private
{ Private declarations }
public
{ Public declarations }
end; var
FrmClient: TFrmClient; implementation {$R *.dfm} procedure TFrmClient.Button2Click(Sender: TObject);
begin
if (ClientSocket1.Active = false) then
begin
ClientSocket1.Host := Edit3.Text;
ClientSocket1.Port := strtoint(Edit2.Text); ClientSocket1.Active := true;
Self.Caption := '连接socket服务器成功!';
end;
end; procedure TFrmClient.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Memo1.Lines.Add('服务器说:' + Socket.ReceiveText);
if (Memo1.Lines.Count > 50) then
Memo1.Lines.Clear; Memo1.Lines.Add('服务器:' + ' Ip=' + Socket.RemoteAddress + ' ' + datetimetostr
(now)); // Socket.RemoteHost +
Memo1.Lines.Add(Socket.ReceiveText);
Memo1.Lines.Add('');
end; procedure TFrmClient.Button1Click(Sender: TObject);
begin
// ClientSocket1.Socket.SendText(Edit1.Text);
with ClientSocket1 do
begin
if Edit1.Text <> '' then
begin
Memo1.Lines.Add('客户端:' + ' ' + datetimetostr(now));
Socket.SendText(Edit1.Text);
Memo1.Lines.Add(Edit1.Text);
Memo1.Lines.Add('');
end;
end;
end; end.
unit server;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ScktComp; type
TFrmMain = class(TForm)
ServerSocket1: TServerSocket;
Memo1: TMemo;
Panel1: TPanel;
Edit2: TEdit;
Label2: TLabel;
Button2: TButton;
Panel2: TPanel;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
CheckBox1: TCheckBox;
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
FrmMain: TFrmMain; implementation {$R *.dfm} procedure TFrmMain.Button1Click(Sender: TObject);
begin
with ServerSocket1 do
begin
if Edit1.Text <> '' then
begin
Memo1.Lines.Add('服务器:' + ' ' + datetimetostr(now));
Socket.Connections[0].SendText(Edit1.Text);
// Socket.Connections[0].RemoteAddress;//IP
Memo1.Lines.Add(Edit1.Text);
Memo1.Lines.Add('');
end;
end;
end; procedure TFrmMain.Button2Click(Sender: TObject);
begin
if Edit2.Text <> '' then
begin
try
ServerSocket1.Port := strtoint(Edit2.Text);
ServerSocket1.Active := true;
Self.Caption := 'Socket服务器待命中,端口:' + Edit2.Text;
Button2.Enabled := False;
except
Self.Caption := 'Socket服务器没有准备好';
end;
end;
end; procedure TFrmMain.Edit2Change(Sender: TObject);
begin
Button2.Enabled := true;
end; procedure TFrmMain.FormCreate(Sender: TObject);
begin
Self.Caption := 'Socket服务器';
end; procedure TFrmMain.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('-----客户端:' + Socket.RemoteAddress + ' 发消息来连接了--');
end; procedure TFrmMain.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode := 0;
end; procedure TFrmMain.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
stemp: string;
begin
try
if (Memo1.Lines.Count > 50) then
Memo1.Lines.Clear; Memo1.Lines.Add('客户端:' + ' Ip=' + Socket.RemoteAddress + ' ' +
datetimetostr(now)); // Socket.RemoteHost +
Memo1.Lines.Add(Socket.ReceiveText);
Memo1.Lines.Add(''); if (CheckBox1.Checked = true) then
begin
Button1.Click;
// Socket.SendText(Edit1.Text);
end; except
Memo1.Lines.Add(datetimetostr(now) + ' :程序异常');
end;
end; end.

delphi之socket通讯的更多相关文章

  1. Delphi 跨平台 Socket 通讯库

    Delphi 跨平台 Socket 通讯库 免费开源的Delphi 跨平台 Socket 通讯库. 源码URL:https://github.com/winddriver/Delphi-Cross-S ...

  2. Delphi跨平台Socket通讯库

    盒子中的souledge大侠发布了新的Socket库,以下为原文: 我之前写过一个iocp的框架,放到googlecode上了. 由于当时的delphi版本尚无法跨平台,所以该框架只能运行在Windo ...

  3. delphi的socket通讯 多个客户端 (转)

    ClientSocket组件为客户端组件.它是通信的请求方,也就是说,它是主动地与服务器端建立连接. ServerSocket组件为服务器端组件.它是通信的响应方,也就是说,它的动作是监听以及被动接受 ...

  4. Delphi的Socket编程步骤(repulish)

    转贴自:http://topic.csdn.net/t/20010727/16/212155.html ClientSocket 和ServerSocket几个重要的属性:   1.client和se ...

  5. 客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)

    今天看到CSDN上这么一篇< 彻底放弃没落的MFC,对新人的忠告!>, 作为一个一直在Windows上搞客户端开发的C++程序员,几年前也有过类似的隐忧(参见 落伍的感觉), 现在却有一些 ...

  6. 闲来无事,写个基于TCP协议的Socket通讯Demo

    .Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...

  7. 试解析Tomcat运行原理(一)--- socket通讯

    关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...

  8. c# TCP Socket通讯基础

    在做网络通讯方面的程序时,必不可少的是Socket通讯. 那么我们需要有一套既定的,简易的通讯流程. 如下: <pre name="code" class="csh ...

  9. Android笔记:Socket通讯常见问题

    经验证的socket通讯问题 1.如果是模拟器和本机PC直接通讯,需要使用本机IP地址 而不是 10.0.2.2  如本机的静态地址为192.168.1.2 则直接使用该地址 2.接收和连接代码不能在 ...

随机推荐

  1. pip安装Python依赖环境

    将包依赖信息保存在requirements.txt文件 pip freeze > requirements.txt 根据依赖文件安装依赖 pip install -r requirements. ...

  2. Cook-Torrance光照模型

    Cook-Torrance光照模型将物体粗糙表面看作由很多微平面组成,每一个微平面都可以看成一个理想的镜面反射体,物体表面粗糙程度由微平面斜率的变化来表示.越粗糙的表面由斜率变化越大,反之越小. Co ...

  3. 《大数据日知录》读书笔记-ch15机器学习:范型与架构

    机器学习算法特点:迭代运算 损失函数最小化训练过程中,在巨大参数空间中迭代寻找最优解 比如:主题模型.回归.矩阵分解.SVM.深度学习 分布式机器学习的挑战: - 网络通信效率 - 不同节点执行速度不 ...

  4. 20164324王启元 Exp4恶意代码分析

    一.实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述一下分析结果. 安装配置sysinternals里的sys ...

  5. BAE+Python+Django+Wechatpy+Baidu weather api +微信订阅号 = 实现微信查询天气

    最近想在微信上面实现天气查询,分两个步骤: 1.被动回复:输入天气.xx天气获取天气情况 2.主动推送:每天定时推送天气(针对24小时内产生交互的人) 目前已经实现第一个步骤,如下: 现将实现此功能环 ...

  6. 等待页面元素(webdriverwait)

    前言 在脚本中加入太多的 sleep 后会影响脚本的执行速度,虽然 implicitly_wait ()这种方法隐式等待方法一定程度上节省了很多时间.但是一旦页面上某些 js 无法加载出来(其实界面元 ...

  7. 浏览器对document.all的支持差异

    从何而来从IE4开始IE的object model才增加了document.all对象,MSDN中也对 Object.all 有详细的说明,Object.all是个HTMLCollection,不是数 ...

  8. 禅道 xampp中的mysql启动时无法产生err文件

       使用opt/lampp/lampp start命令启动 错误提示:root@zabbix_server ~]# /opt/lampp/bin/mysqld_safe_helper: Can‘t ...

  9. GridView 基本使用

    项目中实例一 <asp:GridView ID="gvBatchReceive" runat="server" AutoGenerateColumns=& ...

  10. dns dig 查看支持ipv6网站

    1.处理zone文件 A.先格式化区文件数据,去掉不需要的数据,生成新的文件 com.zone.sample cat com.zone |grep -P IN'\t'NS|awk -F '\t' '{ ...