怎么udp接收udp数据包格式

当前位置: >
> 数据来的一时快,一时慢,如何处理先上我接收UDP的代码,问题在后面privatevoidbutto
数据来的一时快,一时慢,如何处理先上我接收UDP的代码,问题在后面privatevoidbutto
smileing & at
数据来的一时快,一时慢,如何处理先上我接收UDP的代码,问题在后面 &
private void button31_Click(object sender, RoutedEventArgs e) &
thread1 = new Thread(Acc); &
thread1.Start(); &
button31.IsEnabled = &
private void Acc() &
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); &
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 8899); &
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
//绑定已使用端口 (也许是程序死机前用的端口) &
socket.Bind(iep); &
ep = (EndPoint) &
byte[] bytes = new byte[1024];//设置缓冲数据流长度是1024 &
while (true) &
string receiveD &
socket.ReceiveFrom(bytes, ref ep); &
receiveData = System.Text.Encoding.Unicode.GetString(bytes); &
receiveData = receiveData.TrimEnd('\u0000'); &
if (receiveData.Length & 0) &
//textBox1.Text = &来自& + ep.ToString() + &的消息& + receiveD &
TextBoxCallback tx = SetTextB &
this.Dispatcher.Invoke(tx, receiveData); &
Array.Clear(bytes, 0, 1024);//数组初清零 &
delegate void TextBoxCallback(string str);//是接收来网络K发射机传来的文本 &
ArrayList uiyi = new ArrayList();//用来存接收数据 &
public void SetTextBox(string str) &
uiyi.Add(str); &
}我用上面的代码来接收UDP数据,我UDP发射端每秒最多发射120次,也就是发射120行数据,我这里接收用&SetTextBox&方法,将数据直接放入ArrayList数组,测试很长时间,ArrayList uiyi 都能收到全部发射数据。但我的数据要分析处理,我就在“public void SetTextBox”直接进行对数据的加减乘除,在发射端时间间隔一样时,每秒120次的数据量时,对数据的加减乘除处理都未影响接收UDP数据。但实际工作中发射端发射数据一时多,一时少,但都没有超过每秒120次,这时数据处理就影响我的接收了,数据收不全了。如将数据放入ArrayList中,数据是全部收到的。& 我想问的是:有什么方法能将接收到的UDP数据缓存一下,再对数据进行加减乘除。我用过生产者消费者模式的lock,可能没写对,数据还是不全。
生产者消费者模式是可以的,很简单,用ArrayList不是很好,缓冲的数据最好存在队列里,队列最好是用LinkedList实现比较容易操作,生产者和消费者都直接lock(LinkedList),然后生产者接收到数据后,往LinkedList末尾添加,而消费者,处理数据的程序则从LinkedList开头取数据处理,完之后删除这个数据,这样一直到LinkedList为空为止,
smilelw & &
& & (0)(0)
引用其它文章Queue与线程的应用& using S& using System.Collections.G& using System.L& using System.T& using System.T& namespace 集合& {&
class 队列&
public static void Main()&
//队列: 元素以先进先出的方式来处理的集合(FIFO-First In First Out)第一个来,第一个滚&
//例:飞机登记排队,靠前的就先上飞要,不过队列有优先级,如商务仓的队与经济仓的队,是两个不同的队,而商务优先&
//在.Net技术中,
using System.Collections.Generic.Queue&T&是队列的泛型版本实现&
// System.Collections.Queue是非泛型的实现,参数是Object&
//public class Queue&T& : IEnumerable&T&, ICollection, IEnumerable&
//从队列的定义可以看出,它实现了跌代,集合接口 ,它没有实现ICollection&T&这个接口,因为其中定义的Add Remove方法会破坏队列&
//队列与列表主要区别就是在于,它没有实现IList接口&
//所以,不可以用索引器访问队列,队列只允许添加元素,该元素只能放在队列的最后(Enqueue()),还有就是从头部取元素Dequeue()&
//Enqueue从队列的后面插入元素,而 Dequeue在取一个元素的同时,会前取出的元素删除,如再再调用一次,就删除下一个元素&
//方法简介 :&
// Enqueue() 一端插入元素&
// Dequeue() 从头部读取和删除一个元素,如果调用方法时,队列中没有元素,刨出InvalidOperationException异常&
// Peek() 在队列头部读取一个元素,但是,不删除它&smilejing & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-如何设置dgram UDP 【接收】的数据包字节数? - CNode
这家伙很懒,什么个性签名都没有留下。
发布于 2年前
1142 次浏览
比如在PHP中可以这样:
fread($socket, 4000) 一次可以完整读取。
var udp = dgram.createSocket(“udp4”);
udp.on('message’, function(data, info) {
接收就分成了2个包:
&Buffer 00 00 00 ff ef 00 00 0
36 62 70 70 00 31 00 5f 5f 73
length: 1400
&Buffer 65 6e 63 ff 00 b5 00 0
68 00 30 00 6d 70 5f 77 69 6e
length: 532
有没有办法设置一次接收的字节数,让他一次性接完?
因为第三方服务端,我无法修改发包程序,而且第一个包开头有标记,第二个包无标记,没法判断合并。
服务器搭建在
,存储赞助商为扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
jsp网页中怎么监听(接收)udp发送的数据流
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口基于UDP数据广播的局域网络会议程序(下)-数据广播,网络通信,传输-广电行业-hc360慧聪网
&&& 接上文:
&&& BroadcastGroup是数据广播组标示符(波段),&&
//ClientPort是数据广播目标端口(频率)。
packet=newDatagramPacket(b,b.length,BroadcastGroup,ClientPort);
//发送数据包
Sender.send(packet);
}catch(Exceptione){}
//数据接收方法
publicStringReceiveData()
byte[]b=newbyte[1024];
//构造一个空的数据包
DatagramPacketpacket=newDatagramPacket(b,1024);
//接收数据
Receiver.receive(packet);
}catch(IOExceptione){}
//丛数据包中获得接收到的数据
b=packet.getData();
InMsg=newString(b);
&&& 数据接收线程Receiver.java的任务是接收广播数据并更新图形用户界面。该类的构造函数包括两个参数,参数listener指定用来接收数据的Broadcast对象,参数display则指定用来显示会议内容的TextArea对象。在其运行方法run中,循环调用Broadcast对象的数据接收方法ReceiveData接收广播数据,并且利用TextArea对象的append方法将新接收到的内容显示到图形用户界面上。
publicclassReceiverextendsThread
BroadcastL
//构造方法
publicReceiver(Broadcastlistener,TextAreadisplay)
//Listener是一个数据发送与接收对象,用来接收数据。
/Display是一个TextArea对象,用来显示会议内容。
//运行方法
publicvoidrun()
while(true)
//接收广播数据
InMsg=Listener.ReceiveData();
//更新图形用户界面
Display.append(InMsg);
Display.append("\n");
&&& 图形用户界面chat.java是基于Java抽象窗口工具包AWT构建的。该界面包括一个用来显示会议内容TextArea,一个用来接收用户输入的TextField,以及一个数据发送命令按钮。在Chat的构造方法中,我们首先创建图形界面,构造一个数据发送与接收对象和一个数据接收线程,然后启动该线程开始接收会议信息。在这个方法中,我们还利用InetAddress.getLocalHost()方法来获得用户的机器名,这个标示符被用来作为用户在网络会议中的用户名。
//构造方法
publicChat()
//创建图形界面
add(CreateGui());
//其它操作
//构造一个数据发送与接收对象
Device=newBroadcast();
//构造一个数据接收线程
ReceiverRecv=newReceiver(Device,InMsg);
Recv.start();
利用JDK[1]&&&
想让您的事业成功吗?
网上赚钱成功三步曲
让生意火起来!
 进入专题
 关于“、、”的资讯
?&&(7.18 8:38)
?&&(6.18 17:33)
?&&(4.25 12:31)
?&&(3.22 9:20)
?&&(2.28 9:31)
?&&(2.18 17:25)
?&&(2.13 11:42)
?&&(1.22 11:35)
?&&(12.5 15:4)
?&&(12.5 12:8)
聪网赢造企业网上贸易

我要回帖

更多关于 udp数据包格式 的文章

 

随机推荐