zoukankan      html  css  js  c++  java
  • [C#] 接收和发送UDP数据

    除了点对点,通常UDP数据的传递方式有两种,一种是BroadCast,一种是MultiCast。中文一般把它们翻译作广播和组播。前者是简单的在局域网里面广播;后者是借助路由器将数据发送到包括英特网在内的任何多个地址。

    在C#里面,处理UDP通讯最简单的方法就是使用UdpClient。具体使用方法我也不赘述了,在msdn上就有。需要注意的问题有:
    1、UDP通讯在发送的时候可以绑定任何本地端口,但是在接收的时候需要在本地绑定广播或者多播端口。
    2、组播的时候发送和接收双方都需要JoinMulticastGroup。参数timeToLive名字很容易让人误会,其实它指的是允许UDP数据穿过几个路由器(当然还要路由器允许组播包通过才行);在WinSock API当中,这个参数一般叫做scope,我觉得是比较合适的参数名字;如果你不明白或者没有特别的需要,把这个参数设为5就可以了。
    3、UdpClient的发送和接收都是无限阻塞的。这让编程变得更容易,但是也会带来一些麻烦。发送的问题倒不大,因为发送UDP数据基本上不会阻塞。不过接收就不一样了,最好是单独起一个线程进行接收动作,然后在需要停止接收的时候,先UdpClient.Close()再Thread.Abort()。

    如果需要更灵活的控制,那么就不要使用UdpClient,改为直接使用Socket就可以了。稍微麻烦一点,不过道理一样的。

    附带说一下:点对点传大量UDP数据的时候,先调用connect方法可以节省不少时间。
  • 相关阅读:
    HDU6060 RXD and dividing
    Knapsack in a Globalized World --多重完全背包
    hdu 6058 Kanade's sum
    矩形面积 HDU
    Bridge Across Islands POJ
    Manors HDU
    Harry Potter and J.K.Rowling HDU
    Polygons HDU
    Jungle Outpost HDU
    CRB and Farm HDU
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330467.html
Copyright © 2011-2022 走看看