自己写的Delphi UDP 传输模块源代码

Future_OK 2012-02-26 11:27:07
具有内网穿透功能,对于大段数据可以分包传输,在算法上对数据的正确性做了一定的保证。具有连接管理的功能,对于可以管理多组连接,如果远端上时间无想要可以将连接删除。模块独立性教强,接口函数较完备。Server 和 Clinet可以共用一个基类。只是Client要createConnection即可。不过水平有限,错漏难免,请多指教。
http://download.csdn.net/download/future_ok/4090832
...全文
366 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sz100wwb 2012-03-13
  • 打赏
  • 举报
回复
代码里存在Bug 应该是出在delete[index]处

list index out of bounds
sz100wwb 2012-03-10
  • 打赏
  • 举报
回复
您的范例代码里少了回调函数 LoseConnection 造成程序20分钟不到就会崩溃。

麻烦楼主补全一下 初学者 不知道回调函数 LoseConnection 中该处理些什么。
Future_OK 2012-03-04
  • 打赏
  • 举报
回复
Client 端的代码大同小异,因为共用一个基类, 几个CallBack函数可以参考SourceCode中的定义
unit Client;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
fIP : string;
fPort : Integer;
public
{ Public declarations }
end;

var
Form1: TForm1;
client : TUdpCommBase;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
client := TUdpCommBase.Create;
client.Start(9902); // local Port
fIP := '127.0.0.1';
fPort := 9901
client.createConnection(fIP, fPort);
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
client.sendString('Hello World', fIP, fPort);
end;

end.
Future_OK 2012-03-04
  • 打赏
  • 举报
回复
做了一版更新,修正了里面的几个Bug,现在看起来已经可以比较好的工作了。更新的代码在这里
http://download.csdn.net/detail/future_ok/4110604

这里有一个Server端的范例代码:
unit Server;

interface

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

type
TForm1 = class(TForm)
memRcv: TMemo;
txtIP: TEdit;
txtPort: TEdit;
memSend: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure receiveStr(AMsg : string ; IP : string; Port : Integer);
procedure receiveFile(AFile : string ; IP : string; Port : Integer);
public
{ Public declarations }
end;

var
Form1: TForm1;
userver : TUdpCommBase;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
userver := TUdpCommBase.Create;
userver.Start(9902);
userver.receiveString := receiveStr; // Callback function for string receive
userver.receiveFile := receiveFile; // Callback function for file receive
end;
//
procedure TForm1.receiveStr(AMsg : string; IP : string; Port : Integer);
begin
memRcv.Lines.Append(IP + ':'+ IntToStr(Port) + ' ' + AMsg);
if (AMsg = 'connect') then
begin
userver.sendString('ok', IP, Port);
end
else
begin

end;
end;

procedure TForm1.receiveFile(AFile : string; IP : string; Port : Integer);
begin
memRcv.Lines.Append(IP + ':'+ IntToStr(Port) + ' receive file : ' + AFile);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
msg : string;
IP : string;
Port: Integer;
begin
msg := memSend.Text;
IP := txtIP.Text;
Port := StrToInt(txtPort.Text);
userver.sendString(msg, IP, Port);
memSend.Clear;
end;

end.

[Quote=引用楼主 future_ok 的回复:]
具有内网穿透功能,对于大段数据可以分包传输,在算法上对数据的正确性做了一定的保证。具有连接管理的功能,对于可以管理多组连接,如果远端上时间无想要可以将连接删除。模块独立性教强,接口函数较完备。Server 和 Clinet可以共用一个基类。只是Client要createConnection即可。不过水平有限,错漏难免,请多指教。
http://download.csdn.net/download……
[/Quote]
funxu 2012-02-28
  • 打赏
  • 举报
回复
话说要的积分好高,我身边没环境,有人编译了么?为什么感觉代码不全呢?
一剑飘雪 2012-02-27
  • 打赏
  • 举报
回复
下载下来我看看
谢谢分享
代码跳动 2012-02-26
  • 打赏
  • 举报
回复
对我有用
helyna 2012-02-26
  • 打赏
  • 举报
回复
标记,用到的时候下载

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧