社区
C#
帖子详情
接收发送udp数据问题
aiolos1
2009-01-12 02:20:48
我将收到的udp数据5min打一个包存入文件,现在想把文件中的udp数据播放出来(send),有其他程序接收,怎么实现?
因为在接收时两个UDP包的时间间隔是500ms,发送的时候就应该thread.sleep(500);怎么才能根据udp包的时间间隔发送?
...全文
64
4
打赏
收藏
接收发送udp数据问题
我将收到的udp数据5min打一个包存入文件,现在想把文件中的udp数据播放出来(send),有其他程序接收,怎么实现? 因为在接收时两个UDP包的时间间隔是500ms,发送的时候就应该thread.sleep(500);怎么才能根据udp包的时间间隔发送?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangshuihua2007
2010-03-30
打赏
举报
回复
study!!!!!!
happychou
2009-01-12
打赏
举报
回复
//解析接收的数据包,形成PacketArrivedEventArgs事件数据类对象,并引发PacketArrival事件
unsafe private void Receive(byte [] buf, int len)
{
byte temp_protocol=0;
uint temp_version=0;
uint temp_ip_srcaddr=0;
uint temp_ip_destaddr=0;
short temp_srcport=0;
short temp_dstport=0;
IPAddress temp_ip;
PacketArrivedEventArgs e=new PacketArrivedEventArgs();//新网络数据包信息事件
fixed(byte *fixed_buf = buf)
{
IPHeader * head = (IPHeader *) fixed_buf;//把数据流整和为IPHeader结构
e.HeaderLength=(uint)(head->ip_verlen & 0x0F) << 2;
temp_protocol = head->ip_protocol;
switch(temp_protocol)//提取协议类型
{
case 1: e.Protocol="ICMP"; break;
case 2: e.Protocol="IGMP"; break;
case 6: e.Protocol="TCP"; break;
case 17: e.Protocol="UDP"; break;
default: e.Protocol= "UNKNOWN"; break;
}
temp_version =(uint)(head->ip_verlen & 0xF0) >> 4;//提取IP协议版本
e.IPVersion = temp_version.ToString();
//以下语句提取出了PacketArrivedEventArgs对象中的其他参数
temp_ip_srcaddr = head->ip_srcaddr;
temp_ip_destaddr = head->ip_destaddr;
temp_ip = new IPAddress(temp_ip_srcaddr);
e.OriginationAddress =temp_ip.ToString();
temp_ip = new IPAddress(temp_ip_destaddr);
e.DestinationAddress = temp_ip.ToString();
temp_srcport = *(short *)&fixed_buf[e.HeaderLength];
temp_dstport = *(short *)&fixed_buf[e.HeaderLength+2];
e.OriginationPort=IPAddress.NetworkToHostOrder(temp_srcport).ToString();
e.DestinationPort=IPAddress.NetworkToHostOrder(temp_dstport).ToString();
e.PacketLength =(uint)len;
e.MessageLength =(uint)len - e.HeaderLength;
e.ReceiveBuffer=buf;
//把buf中的IP头赋给PacketArrivedEventArgs中的IPHeaderBuffer
Array.Copy(buf,0,e.IPHeaderBuffer,0,(int)e.HeaderLength);
//把buf中的包中内容赋给PacketArrivedEventArgs中的MessageBuffer
Array.Copy(buf,(int)e.HeaderLength,e.MessageBuffer,0,(int)e.MessageLength);
}
//引发PacketArrival事件
OnPacketArrival(e);
}
第二给问题可以使用Timer函数,不过数据大的话可能会有问题
greystar
2009-01-12
打赏
举报
回复
不是很明白你的意思.你将搂据放到文件时,可以定义相应的数据结构,就象(数据库里的表).取的时候也方便,为什么要5Min发送一次,如果真的这样,那你使用定时器来发送好的.
liumeiqinyang
2009-01-12
打赏
举报
回复
帮顶上去
C#的Socket实现
UDP
协议通信
C#的Socket实现
UDP
协议通信 CSharp
Android
UDP
通讯工具
一个简单的Android
UDP
通讯工具
C# Socket TCP和
UDP
报文及端口测试工具的开发(提供源码)万能超好测试工具
C# Socket TCP和
UDP
报文及端口测试工具的开发(提供源码)万能超好测试工具
Socket编程例子
Socket编程例子
java
发送
和
接收
udp
数据
udp
数据
帧结构
java
udp
发送
和
接收
数据
C#
111,094
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章