zoukankan      html  css  js  c++  java
  • C#简单的UDP通信例子

      1 1,UDP客户端
      2 
      3 using System;
      4 using System.Collections.Generic;
      5 using System.ComponentModel;
      6 using System.Data;
      7 using System.Drawing;
      8 using System.Linq;
      9 using System.Text;
     10 using System.Windows.Forms;
     11 using System.Net.Sockets;
     12 using System.Net;
     13 
     14 namespace WindowsFormsApplication14
     15 {
     16     public partial class Form1 : Form
     17     {
     18         UdpClient udpClient;
     19         IPEndPoint ipEndPoint;
     20 
     21         public Form1()
     22         {
     23             InitializeComponent();
     24             udpClient = new UdpClient(12345);
     25             ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.241"), 60000);
     26         }
     27 
     28         private void button1_Click(object sender, EventArgs e)
     29         {
     30             //byte[] mybyte = Encoding.Default.GetBytes("nihao");
     31             
     32             byte[] mybyte = new byte[4];
     33             mybyte[0] = 0x12;
     34             mybyte[1] = 0x00;
     35             mybyte[2] = 0x34;
     36             mybyte[3] = 0x00;
     37 
     38             
     39             udpClient.Send(mybyte, mybyte.Length,ipEndPoint);
     40         }
     41     }
     42 }
     43 2,UDP服务器
     44 
     45 using System;
     46 using System.Collections.Generic;
     47 using System.ComponentModel;
     48 using System.Data;
     49 using System.Drawing;
     50 using System.Linq;
     51 using System.Text;
     52 using System.Windows.Forms;
     53 using System.Net.Sockets;
     54 using System.Net;
     55 
     56 namespace WindowsFormsApplication15
     57 {
     58     public partial class Form1 : Form
     59     {
     60         UdpClient udpServer;
     61         IPEndPoint ipEndPoint;
     62 
     63         public Form1()
     64         {
     65             InitializeComponent();
     66             udpServer = new UdpClient(23456);
     67             ipEndPoint = new IPEndPoint(new IPAddress(0), 0);
     68         }
     69 
     70         private void button1_Click(object sender, EventArgs e)
     71         {
     72             
     73             byte[] data = udpServer.Receive(ref ipEndPoint);
     74             MessageBox.Show ( Encoding.Default.GetString(data));
     75         }
     76     }
     77 }
     78 3,读接收缓冲区当前数据个数
     79 
     80 using System;
     81 using System.Collections.Generic;
     82 using System.ComponentModel;
     83 using System.Data;
     84 using System.Drawing;
     85 using System.Linq;
     86 using System.Text;
     87 using System.Windows.Forms;
     88 using System.Net.Sockets;
     89 using System.Net;
     90 
     91 namespace WindowsFormsApplication15
     92 {
     93     public partial class Form1 : Form
     94     {
     95         UdpClient udpServer;
     96         IPEndPoint ipEndPoint;
     97 
     98         public Form1()
     99         {
    100             InitializeComponent();
    101             udpServer = new UdpClient(23456);
    102             ipEndPoint = new IPEndPoint(new IPAddress(0), 0);
    103         }
    104 
    105         private void button1_Click(object sender, EventArgs e)
    106         {
    107             byte[] outValue =  BitConverter.GetBytes(0);
    108             udpServer.Client.IOControl(IOControlCode.DataToRead, null, outValue);
    109 
    110 
    111             MessageBox.Show((BitConverter.ToInt32(outValue,0)).ToString());//发送数据发现此时数据增长,但不会超过8K
    112             //MessageBox.Show((BitConverter.ToString(outValue)).ToString());
    113 
    114         }
    115     }
    116 }
    117  
    118 
    119 4,上例有点复杂,看下面的例子,这个例子还可以说明如何设置非阻塞Socket通讯
    120 
    121 using System;
    122 using System.Collections.Generic;
    123 using System.ComponentModel;
    124 using System.Data;
    125 using System.Drawing;
    126 using System.Linq;
    127 using System.Text;
    128 using System.Windows.Forms;
    129 using System.Net.Sockets;
    130 using System.Net;
    131 
    132 namespace WindowsFormsApplication15
    133 {
    134     public partial class Form1 : Form
    135     {
    136         UdpClient udpServer;
    137         IPEndPoint ipEndPoint;
    138 
    139         public Form1()
    140         {
    141             InitializeComponent();
    142             udpServer = new UdpClient(23456);
    143             ipEndPoint = new IPEndPoint(new IPAddress(0), 0);
    144             udpServer.Client.Blocking = false; //设置为非阻塞模式
    145         }
    146 
    147         private void button1_Click(object sender, EventArgs e)
    148         {
    149             int buffSizeCurrent;
    150             buffSizeCurrent = udpServer.Client.Available;//取得缓冲区当前的数据的个数            
    151              MessageBox.Show(buffSizeCurrent.ToString());
    152            if (buffSizeCurrent > 0)     //有数据时候才读,不然会出异常哦
    153             {
    154                 byte[] data = udpServer.Receive(ref ipEndPoint);
    155                 MessageBox.Show(Encoding.Default.GetString(data));
    156            }
    157         }
    158     }
    159 }
    160 5,上面的例子是同步非阻塞的例子,但默认是同步阻塞的。除此之外还有异步的通讯方式(事件通知的方式触发),稍微复杂,以后补充。
  • 相关阅读:
    wordpress站点更换域名了如何快速设置
    wordpress调用文章摘要,若无摘要则自动截取文章内容字数做为摘要
    宝塔https部署没成功的原因排查
    全球百大网站排行榜6月榜出炉
    深度 | 邢波教授谈人工智能科学路径:为人工智能装上「无穷动」引擎
    C++中public,protected,private派生类继承问题和访问权限问题
    谁再说Matlab速度慢,我跟谁急
    C++常用的#include头文件总结
    Visual Studio的调试技巧
    How to (seriously) read a scientific paper
  • 原文地址:https://www.cnblogs.com/wilderhorse/p/3248514.html
Copyright © 2011-2022 走看看