在开始之前我们需要了解下这个Demo功能是啥


我们可以看到这是两个小project,左边的project有服务端和客户端1,右边的project只有一个客户端2

效果就是当两个客户端各自分别输入正确的IP地址和PORT端口,然后btconnect连接就可以连接到这个服务端

然后就可以发送消息,服务端的Memo1可以显示来自客户端发送信息的内容。

另外服务端也可以发送消息给两个客户端,做到双向传递信息。

两个客户端发送信息给服务端:


服务端接收消息反馈给客户端:


做的很粗糙,但是大概功能算是实现了

具体做法:

第一步、

建立一个Project新建From1拖入如下控件TServerSocket,TClientSocket,TMemo2个,Label四个,TEdit两个

TButton四个,TStatusBar。然后设置属性,ServerSocket1的Action为True;ServerSocket1的Port为1025

代码如下:

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    ServerSocket1: TServerSocket;
    Memo2: TMemo;
    StatusBar1: TStatusBar;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    btnConnect: TButton;
    btnSent: TButton;
    btnDisconnect: TButton;
    Button1: TButton;
    Memo1: TMemo;
    Label3: TLabel;
    Label4: TLabel;
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    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.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);
var i:integer;
begin

for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
    Serversocket1.socket.connections[i].SendText(Memo1.Text);//服务端向客户端发送信息

end;

////////////////////////////////////////////////////////////////////////客户端代码////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText:='连接成功';//状态栏显示状态
end;

procedure TForm1.btnConnectClick(Sender: TObject);//输入IP和PORT连接
begin
 if not ClientSocket1.Active then
   begin
     ClientSocket1.Host := Edit1.Text;
     ClientSocket1.Port := StrToInt(Edit2.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(Memo2.Text)
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);//客户端监听来自服务端的数据
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;

end.

 

第二步、

再新建一个project作为客户端2 建立Form1拖入控件TClientSocket,TMemo,TEdit两个,Label三个,TButton三个,TStatusBar

代码如下:

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Memo2: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    btnConnect: TButton;
    StatusBar1: TStatusBar;
    btnSent: TButton;
    btnDisconnect: TButton;
    Label3: TLabel;
    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 := Edit1.Text;
     ClientSocket1.Port := StrToInt(Edit2.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(Memo2.Text)
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;

end.

http://blog.csdn.net/s371795639/article/details/53976864

基于Delphi实现客户端服务端通信Demo的更多相关文章

  1. Netty4 学习笔记之一:客户端与服务端通信 demo

    前言 因为以前在项目中使用过Mina框架,感受到了该框架的强大之处.于是在业余时间也学习了一下Netty.因为Netty的主要版本是Netty3和Netty4(Netty5已经被取消了),所以我就直接 ...

  2. 客户端服务端通信protocol

    这个协议不知我在上面耗费了多长时间,也有人问过我咋回事,这个protocol不长,但对于我来说理解起来很费劲,今天回来看看忽然看懂了(80%),只能说不知看了多少遍 其实这些东西应该在来的一个月这样子 ...

  3. go 客户端服务端通信

    client.go package main import ( "bufio" "encoding/json" "fmt" "ha ...

  4. 基于开源SuperSocket实现客户端和服务端通信项目实战

    一.课程介绍 本期带给大家分享的是基于SuperSocket的项目实战,阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何实现打通B/S与C/S网络通讯,如果您对本期的<基于开源Supe ...

  5. 轻量级通信引擎StriveEngine —— C/S通信demo(2) —— 使用二进制协议 (附源码)

    在网络上,交互的双方基于TCP或UDP进行通信,通信协议的格式通常分为两类:文本消息.二进制消息. 文本协议相对简单,通常使用一个特殊的标记符作为一个消息的结束. 二进制协议,通常是由消息头(Head ...

  6. 基于web的IM软件通信原理分析

    关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...

  7. 通信服务器群集——跨服务器通信Demo(源码)

    对于一些基于TCP Socket的大型C/S应用来说,能进行跨服务器通信可能是一个绕不开的功能性需求.出现这种需求的场景类似于下面描述的这种情况. 假设,我们一台TCP应用服务器能同时承载10000人 ...

  8. 轻量级通信引擎StriveEngine —— C/S通信demo(附源码)

    前段时间,有几个研究ESFramework的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好友关系.也不 ...

  9. Netty入门之客户端与服务端通信(二)

    Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码 ...

随机推荐

  1. spring 技巧集锦

    SpringBoot四大神器之Actuator actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看.相关功能统计等. <dependenc ...

  2. 10 个免费的 C/C++ 集成开发环境

    集成开发环境(IDE)可以给程序员提供很大的帮助.大多数的IDE包含编译器和解释器.例如微软的 Visual Studio 本身内置的编译器和解释就是很好的例子,Eclipse 是另一个很好的例子.鼓 ...

  3. 192M内存的VPS,安装Centos 6 minimal x86,无法安装node.js

    尝试了各种方法,始终安装不了node.偶然一次,安装了64位的Centos 6 minimal,竟然可以安装Node官网给出的命令安装node了,一切顺利.

  4. 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)

    作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...

  5. Python 格式化输出 —— 小数转化为百分数

    比如将 0.1234 转化为 12.34% 的形式: rate = .1234 print('%.2f%%' % (rate * 100)) 第一个百分号和 .2f 相连,表示浮点数类型保留小数点后两 ...

  6. ASP.NET中前台如何调用后台变量

    .Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %> ...

  7. C++利用结构

    #include <iostream> using std::cout; using std::endl; //定义结构 struct Box{ double length; double ...

  8. iis启动 服务无法在此时接受控制信息。 (异常来自 HRESULT:0x80070425)

    原文:iis启动 服务无法在此时接受控制信息. (异常来自 HRESULT:0x80070425) 问题描述:每隔一段时间应用程序池就会自动停止,报错:服务无法在此时接受控制信息. (异常来自 HRE ...

  9. WPF 3D模型的一个扩展方法

    原文:WPF 3D模型的一个扩展方法 在WPF 3D中,我们常常需要改变一个ModelVisual3D对象的颜色. 先说说ModelVisual3D,本质上3D模型都是由一个个的三角形构成的,并且经过 ...

  10. Python 爬虫 —— BeautifulSoup

    from bs4 import BeautifulSoup % 首字母大写,显然这是一个类 1. BeautifulSoup 类 HTML 解析类(parser) r = requests.get(. ...