在多线程中使用UDP
type TUdpThread = class(TThread) private FData : PChar; //数据区 FBytes : Integer; //数据区大小 FFromIP : string; //UDP的源地址 FFromPort : Integer; //UDP的源端口 public constructor Create(Buffer: PChar; NumberBytes: Integer; FromIP: String; Port: Integer); protected procedure Execute; override; end; procedure TForm1.Button1Click(Sender: TObject); constructor TUdpThread.Create(Buffer: PChar; NumberBytes: Integer; FromIP: String; Port: Integer); FData := Buffer; FreeOnTerminate := True; procedure TUdpThread.Execute; Randomize; myUDP.SendBuffer(BackTo, 2); //回个响应包给对方 FreeMem(Buffer, FBytes+1); procedure TForm1.UdpRecvDataReceived(Sender: TComponent; procedure TForm1.UdpSendDataReceived(Sender: TComponent; |
来自:painboy, 时间:2004-8-8 13:56:05, ID:2754370
SORRY,看错题了。你是说要在线程里收发数据。用API重写了一下,D5下通过了。
type TUdpThread = class(TThread) private FSocket : TSocket; public constructor Create; protected procedure Execute; override; function CanRead(Socket : TSocket; Timeout: Integer): Boolean; end; constructor TUdpThread.Create; function TUdpThread.CanRead(Timeout: Integer): Boolean; procedure TUdpThread.Execute; Form1.Memo1.Lines.Add(inet_ntoa(sa.sin_addr)+' : '+UdpBuffer); FillChar(UdpBuffer, 2, f); // procedure TForm1.Button1Click(Sender: TObject); //这里 UdpSend是个TNMUDP控件 procedure TForm1.UdpSendDataReceived(Sender: TComponent; |
来自:乡村月光, 时间:2004-8-8 14:45:58, ID:2754430
我有API的代码,一个转发服务器,一个队列发送器,一个队列接收器,用起来很方便,有人要就贴
来自:乡村月光, 时间:2004-8-9 22:23:59, ID:2756448
unit UDPNet; interface // 为了提高效率,本单元所有的地址都使用winsock内部格式,和习惯IP之间用AddrToIP和IPToAdr转换! UDPXDATAFLAG = AC5; // 转发数据包头标志 WM_TERMINATE = WM_USER + 100; // 结束线程 type ESocketError = class(Exception); TSyncUDPSocket = class(TObject) // 封装API TUDPXDataBuffer = packed record // 转发数据包 TUDPXServerThread = class(TThread) // 数据转发服务器 TUDPQueData = packed record // 队列数据 TUDPDataQue = record // 队列 TUDPReceiver = class; TUDPReceiver = class(TThread) // 接收器 TUDPQueSender = class(TThread) // 队列发送器,通过消息WM_TERMINATE结束 function AddrToIP(Addr: Integer): string; implementation constructor TSyncSignal.Create(IniState: Boolean); destructor TSyncSignal.Destroy; function TSyncSignal.GetSignal: Boolean; procedure TSyncSignal.Reset; constructor TSyncUDPSocket.Create; destructor TSyncUDPSocket.Destroy; function TSyncUDPSocket.GetBroadcast: Boolean; function TSyncUDPSocket.GetReuseAddr: Boolean; function TSyncUDPSocket.GetRecvBufSize: Integer; function TSyncUDPSocket.GetSendBufSize: Integer; procedure TSyncUDPSocket.SetBroadcast(Value: Boolean); procedure TSyncUDPSocket.SetReuseAddr(Value: Boolean); procedure TSyncUDPSocket.SetRecvBufSize(Value: Integer); procedure TSyncUDPSocket.SetSendBufSize(Value: Integer); function TSyncUDPSocket.ByteCanRead: Integer; function TSyncUDPSocket.WaitForData(TimeOut: Integer): Boolean; function TSyncUDPSocket.RecvBuffer(var Buffer; Len: Integer): Integer; function TSyncUDPSocket.RecvFrom(var Buffer; Len: Integer; var Addr: Integer; var Port: Word): Integer; function TSyncUDPSocket.SendBuffer(var Buffer; Len: Integer): Integer; function TSyncUDPSocket.SendTo(Addr: Integer; Port: Word; var Buffer; Len: Integer): Integer; procedure TSyncUDPSocket.Bind(Addr: Integer; Port: Word); procedure TSyncUDPSocket.Connect(Addr: Integer; Port: Word); procedure TSyncUDPSocket.CreateSocket; procedure TSyncUDPSocket.GetLocalHost(var IP: string; var Port: Word); procedure TSyncUDPSocket.GetRemoteHost(var IP: string; var Port: Word); constructor TUDPXServerThread.Create(Port: Word); destructor TUDPXServerThread.Destroy; procedure TUDPXServerThread.Execute; constructor TUDPReceiver.Create(Sock: TSyncUDPSocket); procedure TUDPReceiver.Execute; constructor TUDPQueSender.Create(Sock: TSyncUDPSocket; BufSize: Integer); destructor TUDPQueSender.Destroy; function TUDPQueSender.AddData(Addr: Integer; Port: Word; const Header; HLen: Word; procedure TUDPQueSender.Execute; function AddrToIP(Addr: Integer): string; function IPToAddr(const IP: string): Integer; var procedure Startup; procedure Cleanup; initialization finalization end. |
阅读全文(305) / 评论 / 扔小纸条 / 给kraft留言 / 文件夹: delphi
转载于:https://blog.51cto.com/525927/121286
在多线程中使用UDP相关推荐
- 聊聊iOS中TCP / UDP 协议
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于 传输层协议. UDP(User Datagram protoco ...
- 【Linux】多线程中使用fork()
(最核心的东西我在下面用红色字体标出来了,理解了那块,这些东西都是就理解了!) 在本篇文章开始之前,需要大家先了解线程和进程,这位大哥讲的言简意赅:进程和线程的主要区别(总结)_kuangsongha ...
- java闭合数据_java多线程中线程封闭详解
线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- linux如何关闭udp端口,如何阻止linux RHEL7中的udp端口范围(How to block udp ports range in linux RHEL7)...
如何阻止linux RHEL7中的udp端口范围(How to block udp ports range in linux RHEL7) 需要测试使用UDP端口范围从5000到60,000英寸的应用 ...
- 了解多线程中的yield
2019独角兽企业重金招聘Python工程师标准>>> 最近在学习多线程这一块,发现里面有好多让人产生误区的地方,今天我来分析下java多线程中的yield功能,希望其他朋友也可以从 ...
- 解决DataGridView在多线程中无法显示滚动条的问题
解决DataGridView在多线程中无法显示滚动条的问题 参考文章: (1)解决DataGridView在多线程中无法显示滚动条的问题 (2)https://www.cnblogs.com/roph ...
- VMware 虚拟化编程(8) — 多线程中的 VixDiskLib
目录 目录 前文列表 多线程注意事项 多线程中的 VixDiskLib 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化 ...
- 如何在多线程中调用winform窗体控件2——实例篇
如何在多线程中调用winform窗体控件2--实例篇 针对之前文章<如何在多线程中调用winform窗体控件>,下面举个我项目中的实际案例,这是一个我自定义控件在异步设置焦点时的代码.在新 ...
最新文章
- [转]Windows CE 编程的十点忠告(by pdasky)
- TypeError: sequence item 0: expected str instance, int found
- 小学计算机教案表格式,小学信息技术教案表格数据处理.docx
- 吉他谱——寂寞是因为思念谁
- (六)关于beetlsql版本(分支)的说明
- Mapreduce运行过程分析(基于Hadoop2.4)——(三)
- Pascal调用与C调用
- 中国移动MM如何解决盗版问题
- Django 开发的个人博客源码分享
- Qt5.2.1 + VS2012 环境配置
- labview技巧——获取网络时间
- 解决master[remote rejected] pre-receive hook declined
- Lumion 9.0 动画渲染的10个技术技巧
- ggsurvplot的p值到底是如何计算的
- U盘文件全变快捷方式解决办法
- pyinstaller打包exe速记
- 100天精通Python(进阶篇)——第34天:正则表达式大总结(基础+代码实战)
- 1 面向对象设计模式与原则
- 百度SEO发包快排解密
- 利用小米手环记录并生成心率图
热门文章
- 201521123004《软件工程》个人阅读作业1
- 点击跳转到QQ聊天界面
- Python字符串笔录
- python和django中的常见错误
- System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
- 访问被拒绝:“microsoft.web.ui.webcontrols”的解决办法
- Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶第一篇
- MTK-TP(电阻屏校准程序ts_lib移植)
- 论一个程序员的自我修养-从一张图片说起
- while read line的问题