如何 监听,接收 所有UDP端口 数据

如何 监听,接收 所有UDP端口 数据,第1张

12端口就用12个线程去接收。 但处理都是尺乎槐一样的吧。

所以要有个事件 比如定义一个事件

public delegate void DataArrivalHandler(byte[] data)参数你陵友定,或者(Stream s)之类,也可以是自定一个类(包含其它信息)继承EventArgs写个 (DataEventArgs e)

public event DataArrivalHandler OnDataArrived

OnDataArrived+=()这里注册相应的方法,如果不同端口的处理不一样,就相应写不同的事件,当然也可以只定义一个方法,方法根据不同的端口处理。

while(true)

{

byte[] data = (获取)

这里获取数据后,直接调用

OnDataArrived(data)/OnDataArrived(stream)/OnDataArrived(new DataEventArgs (data,ip,port)之类,根据你定义的参数来。

}

而注册的方法里的具体实现,用委托异步调用. 方法体里执行

{

namedDelegate.beginEnvoke()

}

这样,数据处理就异步完成了。

避免数据丢失的话,做个保险。 把接收的数据放顷蚂入定义的缓冲块里。 当接收的数据量到达一定程序后,取出部分处理,再加入新数据。

类似于TCP的的滑动窗口。 麻烦点,但实现了,效果会好的多。

--------------------------

为什么要用ThreadPool? 不便于控制状态。 当你的线程处理的业务非常单一时用它,这种情况需要不需额外的状态信息,比如就像你上面的每次有不同的byte[] data。

直接 new ThreadStart()

不懂不要乱说!!!现在的人啊!!!真是~

“扮烂UDP在1900端口监听远程地址127.0.0.1的4100端口”只能说明有程序占用了本地1900号端口。127.0.0.1是你自己的IP地址,是本机保留IP,每台电脑都一样。也就是说你的1900端口在连接你4100端口。

当然,这并不能说没有问题销隐,因为连接地址有可能变。你应当查看是什么程序在连接,然后再判断程序是否厅斗漏安全。只凭这个信息不能说明什么。

你的代码和你的问题根本就不是一码事啊,你的问题是写的UDP程序会死,可实际上你写的TCP,手亩岩Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp),明明建立的是TCP的毕御socket,另耐册外UDP是不需要accept的,只需要recv就行。TCP首先要recv,再accept。你这个代码完全是错误的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12394774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存