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

我以后再改进吧。。。。

服务端代码:

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. jdk8-collect

    toMap 常用方式 public Map<Long, String> getIdNameMap(List<Account> accounts) { return accoun ...

  2. 【b302】侦探推理

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏 ...

  3. nth-child与nth-of-type

    nth-of-type这个CSS3伪类还从来没有用过,今天好好研究一番,发现还是有用的.现在下面的Demo <!DOCTYPE html> <html> <head> ...

  4. HDU 3605Escape(缩点+网络流之最大流)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3605 本来打算昨天写两道题的,结果这个题卡住了,最后才发现是最后的推断条件出错了,推断满流的条件应该是 ...

  5. javascript中间AJAX

    兼容访问XMLHttpRequest物: var xhr = null; if(window.XMLHttpRequest){ //非IE浏览器 xhr = window.XMLHttpRequest ...

  6. 如何JOPtionPane的showConfirmDialog对话框button设置监视器

    只是最近才知道javaGUI编程.我认为,独立撰写一个记事本,要在其中的对话框过程button设置监视器.但找了一下api相应的方法已被发现,只有找到: Returns: an integer ind ...

  7. HTTP协议(一些报头字段的作用,如cace-control、keep-alive)

    ---恢复内容开始--- Http连接是一种短连接,是一种无状态的连接. 所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接. 如果是一个连接的话,服务器 ...

  8. 分布式高级(十三)Docker Container之间的数据共享

    sudo docker run -it -v /usr/lib:/usr/lib/dbdata --name dbcontainer-192.168.1.184 ubuntu:14.04 sudo d ...

  9. /var/tmp/.oracle 和 oracle listener (监听)的一点理解

    关于 /var/tmp/.oracle 的作用測试 ~---查看 /var/tmp 的权限 [root@lixora var]# ll total 164 ... drwxrwxrwt  3 root ...

  10. tar.gz文件命名及压缩解压方法

    tar.gz文件命名 tar是把文件打成一个包,并不压缩; gz是用gzip把打成包的.tar文件压缩; 所以成了一个.tar.gz的文件 压缩 # tar cvfz backup.tar.gz /x ...