zoukankan      html  css  js  c++  java
  • Delphi-网络编程-第一个网络方面作品(UDP聊天程序)

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

    我以后再改进吧。。。。

    服务端代码:

    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

  • 相关阅读:
    Java反射机制的简单应用
    UI组件之AdapterView及其子类关系,Adapter接口及事实上现类关系
    CSDN日报20170406 ——《代码非常烂,所以离职。》
    Swift环境下实现UILabel居上 居中 居下对齐
    在EA中将画出的ER图转换成SQL脚本
    hdu2236
    glm编译错误问题解决 formal parameter with __declspec(align('16')) won't be aligned
    CSS中的相关概念
    javascript jquery 推断对象为空的方式
    swift 给导航添加item,实现界面的跳转
  • 原文地址:https://www.cnblogs.com/findumars/p/6546058.html
Copyright © 2011-2022 走看看