其实这不算是一个聊天程序,因为还不能实现双方互发信息,只有一方能发信息,呵呵

我以后再改进吧。。。。

服务端代码:

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, StdCtrls,
  ExtCtrls,IdSocketHandle;
 
type
  TCommBlock = record        // 通讯结构
  SenderName,              // 发信方名字
  Msg : string[100];  // 消息
  end;
  TForm1 = class(TForm)
    Memo1: TMemo;
    Panel1: TPanel;
    Memo2: TMemo;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    LabeledEdit1: TLabeledEdit;
    Button1: TButton;
    IdUDPServer1: TIdUDPServer;
    Button2: TButton;
    Button3: TButton;
    procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);//客户端连接上后触发的事件
var
  Comm : TCommBlock;
begin
  AData.ReadBuffer(Comm,AData.Size);
  Memo1.Lines.Add(Comm.SenderName+':'+Comm.Msg);
end;
 
procedure TForm1.Button1Click(Sender: TObject);//倾听
begin
  IdUDPServer1.DefaultPort := StrToInt(LabeledEdit1.Text);
  IdUDPServer1.Active := True;
  Button1.Enabled:=True;
end;
 
procedure TForm1.Button2Click(Sender: TObject);//清空记录
begin
Memo1.Clear;
end;
 
procedure TForm1.Button3Click(Sender: TObject);//关闭
begin
Close;
end;
 
end.

客户端代码:

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, IdBaseComponent, IdComponent, IdUDPBase,
  IdUDPClient;
 
type
  TCommBlock = record        // 通讯结构
    SenderName,              // 发信方名字
    Msg : string[100];  // 消息
  end;
  TForm1 = class(TForm)
    Panel2: TPanel;
    Memo2: TMemo;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    IdUDPClient1: TIdUDPClient;
    LabeledEdit3: TLabeledEdit;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
const
  RECIEVETIMEOUT = 5000; // 毫秒,连接等待
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);//连技
begin
  IdUDPClient1.Host:=LabeledEdit1.Text;
  IdUDPClient1.Port:=StrToInt(LabeledEdit2.Text);
  IdUDPClient1.ReceiveTimeout:=RECIEVETIMEOUT;
end;
 
procedure TForm1.Button2Click(Sender: TObject);//发送
var
  Comm:TCommBlock;
begin
  Comm.SenderName:=LabeledEdit3.Text;
  Comm.Msg:=Memo2.Lines.Text;
  Memo1.Lines.Add(Comm.SenderName+':' + Comm.Msg);
  IdUDPClient1.SendBuffer(Comm,sizeof(Comm));
end;
 
procedure TForm1.Button3Click(Sender: TObject);//关闭
begin
Close;
end;
 
procedure TForm1.Button4Click(Sender: TObject);//清空记录
begin
Memo1.Clear;
end;
 
end.

http://www.cnblogs.com/keyvip/archive/2010/11/16/1878713.html

Delphi-网络编程-第一个网络方面作品(UDP聊天程序)的更多相关文章

  1. day26_网络编程第一天

    1.网络通信三要素(掌握) IP      端口号      协议(UPD&TCP) 2.UDP协议与TCP协议各自特点(掌握) UDP 1.不需要建立连接:     2.有数据大小限制,每个 ...

  2. [转帖]关于网络编程中MTU、TCP、UDP优化配置的一些总结

    关于网络编程中MTU.TCP.UDP优化配置的一些总结 https://www.cnblogs.com/maowang1991/archive/2013/04/15/3022955.html 感谢原作 ...

  3. UNP(一):网络编程角度下的TCP、UDP协议

    此博文是学习UNP(UNIX Network Programming)后的读书笔记,供以后自己翻阅回想知识. TCP.UDP概述 在前面<计算机网络与TCP/IP>栏目下已经介绍过一些关于 ...

  4. UNIX网络编程---传输层:TCP、UDP、SCTP(二)

    UNIX网络编程----传输层:TCP.UDP.SCTP 一.概述 本章的焦点是传输层:包括TCP.UDP.和SCTP(流控制传输协议).SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令. ...

  5. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    [Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...

  6. 网络编程 套接字socket TCP UDP

    网络编程与套接字 网络编程 网络编程是什么: ​ 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 ​ 编写基于网络的应用程序的过程序称之为网络编程. 网络编程最主要的工 ...

  7. 用C++实现网络编程---抓取网络数据包的实现方法

    一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...

  8. C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。

    最近接触了C#Socket网络编程,试着做了试试(*^__^*) 实现多个客户端和服务端互相发送消息 发送文件抖动窗口功能 服务端: using System; using System.Collec ...

  9. UNIX网络编程——非阻塞connect:时间获取客户程序

    #include "unp.h" int connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec) ...

随机推荐

  1. 初始化NSDictionary:(工作经验)两种方法有时候效果不一样

    方法1: NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; [dic setObject:[Hp_KeysArray obj ...

  2. Visual Studio for Mac

    Visual Studio for Mac 初体验   你喜爱的 IDE,现在可用于 Mac 来自:https://www.visualstudio.com/zh-hans/vs/visual-stu ...

  3. Zygote总结

    Zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序 app_process,所对应的源文件是App_main.cpp,进程名为zygote ...

  4. Android源码分析-点击事件派发机制

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17339857 概述 一直想写篇关于Android事件派发机制的文章,却一直没 ...

  5. 在 Oracle 中新建 SDE 用户

    --1.创建用户(SDE)和密码(SDE) CREATE USER SDE IDENTIFIED BY SDE --2.创建表空间(SDE) CREATE TABLESPACE SDE DATAFIL ...

  6. Struts2——(6)表单校验

    一.表单校验 js,jquery是客户端校验,今天要说的是客户端校验. 禁止js,或者机器代码会破坏客户端校验,所以客户端校验相对不安全. 服务器端校验是基于java代码在服务器端进行校验,特点是相应 ...

  7. framework7使用问题汇总

    framework7 是个非常漂亮的Html框架,最近有个微信公众号的项目使用到了这个,后期还可以封装成APP. 淘宝版和中文官网都是V1,V2只能看英文版的http://framework7.io/ ...

  8. visualsvn server 提交修改日志

    修改日志时遇到以下错误: Repository has not been enabled to accept revision propchanges;ask the administrator to ...

  9. matlab 高级函数

    2*randn(sz):0 均值,方差为 4(variance), standard deviation:标准差为 2: numel():returns the # of elements: nume ...

  10. Analysis of variance(ANOVA)

    方差分析,也称为"变异数分析",用于两个及两个以上样本均值(group means)差别的显著性检验.在 ANOVA 的环境下,一个观测得到的方差视为是由不同方差的源组合而成.