2015-02-11 17:20 1218人阅读 评论(0) 收藏 举报
 分类:
C#开发技术(22) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

服务器端对象类库:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net.Sockets;
  6. using System.Net;
  7. using System.Threading;
  8. using System.IO;
  9. namespace UdpChatExample
  10. {
  11. /// <summary>
  12. /// UDP服务器对象
  13. /// </summary>
  14. public class UDPServerClass
  15. {
  16. public delegate void MessageHandler(string Message);//定义委托事件
  17. public event MessageHandler MessageArrived;
  18. public UDPServerClass()
  19. {
  20. //获取本机可用IP地址
  21. IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
  22. foreach (IPAddress ipa in ips)
  23. {
  24. if (ipa.AddressFamily == AddressFamily.InterNetwork)
  25. {
  26. MyIPAddress = ipa;//获取本地IP地址
  27. break;
  28. }
  29. }
  30. Note_StringBuilder = new StringBuilder();
  31. PortName = 8080;
  32. }
  33. public UdpClient ReceiveUdpClient;
  34. /// <summary>
  35. /// 侦听端口名称
  36. /// </summary>
  37. public int PortName;
  38. /// <summary>
  39. /// 本地地址
  40. /// </summary>
  41. public IPEndPoint LocalIPEndPoint;
  42. /// <summary>
  43. /// 日志记录
  44. /// </summary>
  45. public StringBuilder Note_StringBuilder;
  46. /// <summary>
  47. /// 本地IP地址
  48. /// </summary>
  49. public IPAddress MyIPAddress;
  50. public void Thread_Listen()
  51. {
  52. //创建一个线程接收远程主机发来的信息
  53. Thread myThread = new Thread(ReceiveData);
  54. myThread.IsBackground = true;
  55. myThread.Start();
  56. }
  57. /// <summary>
  58. /// 接收数据
  59. /// </summary>
  60. private void ReceiveData()
  61. {
  62. IPEndPoint local = new IPEndPoint(MyIPAddress, PortName);
  63. ReceiveUdpClient = new UdpClient(local);
  64. IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0);
  65. while (true)
  66. {
  67. try
  68. {
  69. //关闭udpClient 时此句会产生异常
  70. byte[] receiveBytes = ReceiveUdpClient.Receive(ref remote);
  71. string receiveMessage = Encoding.Default.GetString(receiveBytes, 0, receiveBytes.Length);
  72. //  receiveMessage = ASCIIEncoding.ASCII.GetString(receiveBytes, 0, receiveBytes.Length);
  73. MessageArrived(string.Format("{0}来自{1}:{2}", DateTime.Now.ToString(), remote, receiveMessage));
  74. //try
  75. //{
  76. //    Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");
  77. //    ReceiveUdpClient.Send(sendBytes, sendBytes.Length, local);
  78. //}
  79. //catch (Exception e)
  80. //{
  81. //}
  82. //break;
  83. }
  84. catch
  85. {
  86. break;
  87. }
  88. }
  89. }
  90. /// <summary>
  91. /// 添加日志信息到Note_StringBuilder
  92. /// </summary>
  93. public void AddMessage_Note_StringBuilder()
  94. {
  95. }
  96. }
  97. }

界面简单代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace UdpChatExample
  10. {
  11. public partial class UDPServerForm : Form
  12. {
  13. public UDPServerForm()
  14. {
  15. InitializeComponent();
  16. }
  17. public delegate void DelegateChangeText(string Messages);
  18. void ChangeTxt(string Messages)
  19. {
  20. string SBText = SB.ToString();
  21. SB.Remove(0, SB.Length);
  22. SB.Append(Messages + "\r\n" + SBText);
  23. richTextBox1.Text = SB.ToString();
  24. }
  25. StringBuilder SB = new StringBuilder();
  26. private void UDPServerForm_Load(object sender, EventArgs e)
  27. {
  28. }
  29. UDPServerClass UDPServerClass1;
  30. private void button1_Click(object sender, EventArgs e)
  31. {
  32. UDPServerClass1 = new UDPServerClass();
  33. UDPServerClass1.Thread_Listen();
  34. UDPServerClass1.MessageArrived += new UDPServerClass.MessageHandler(UDPServerClass1_MessageArrived);
  35. }
  36. void UDPServerClass1_MessageArrived(string Message)
  37. {
  38. richTextBox1 .Invoke (new DelegateChangeText(ChangeTxt),Message);
  39. }
  40. private void UDPServerForm_FormClosing(object sender, FormClosingEventArgs e)
  41. {
  42. System.Environment.Exit(System.Environment.ExitCode);
  43. }
  44. }
  45. }

C# 建立UDP服务器并接收客户端数据的更多相关文章

  1. 【实验 1-2】编写一个简单的 UDP 服务器和 UDPP 客户端程序。程序均为控制台程序窗口。

    1.服务器 #include<winsock2.h> //包含头文件#include<stdio.h>#include<windows.h>#pragma comm ...

  2. Python 绝技 —— UDP 服务器与客户端

    i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 绝技 —— TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演 ...

  3. Linux系统编程(37)—— socket编程之UDP服务器与客户端

    典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...

  4. 安卓作为udp服务器,PC作为客户端,仅监听

    安卓客户端作为udp服务器,监听其他客户端的数据,测试已成功 本次实验所用数据: 安卓作为服务器: 端口:8888            IP:192.168.1.104 电脑作为客户端: 端口:50 ...

  5. 建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序

    在Windows平台上主要有两个版本的Socket Api函数:WinSock 1.1和WinSock 2.2 , 2.2版本默认兼容1.1版本,1.1 winsock.h wsock32.lib w ...

  6. node.js中通过dgram数据报模块创建UDP服务器和客户端

    node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...

  7. 10-51单片机ESP8266学习-AT指令(ESP8266连接路由器,建立TCP服务器,分别和C#TCP客户端和AndroidTCP客户端通信+花生壳远程通信)

    http://www.cnblogs.com/yangfengwu/p/8871464.html 先把源码和资料链接放到这里 源码链接:https://pan.baidu.com/s/1wT8KAOI ...

  8. windows下UDP服务器和客户端的实现

      UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据.   服务器端   1.初始化 WASStartup ( ... )   2.创建Socket s ...

  9. 【卷二】网络三—UDP服务器与客户端

    这是另一个类型的服务器/客户端,无连接的 UDP: (User Datagram Protocol) 用户数据报协议 参考: P58~P60 UDP 时间戳服务器 [时间戳 就是ctime()显示的内 ...

随机推荐

  1. 数据库设计(四)数据库的规范化(Normalization)

    数据库的规范化 Database Normalization is a technique of organizing the data in the database. Normalization ...

  2. GCD 莫比乌斯反演 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对.

    /** 题目:GCD 链接:https://vjudge.net/contest/178455#problem/E 题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对( ...

  3. uva11383 Golden Tiger Claw 深入理解km算法

    /** 题目: uva11383 Golden Tiger Claw 深入理解km算法 链接:https://vjudge.net/problem/UVA-11383 题意:lv 思路:lrj训练指南 ...

  4. 成功抓取csdn阅读量过万博文

    http://images.cnblogs.com/cnblogs_com/elesos/1120632/o_111.png var commentscount = 1; 嵌套的评论算一条,这个可能有 ...

  5. 快速排序的c++实现 和 python 实现

    最近在学python,其中有个要求实现快速排序的练习,就顺便复习了c++的快速排序实现. 快速排序的基本思想是,通过一轮的排序将序列分割成独立的两部分,其中一部分序列的关键字(这里主要用值来表示)均比 ...

  6. python eval() hasattr() getattr() setattr() 函数使用方法详解

    eval() 函数 --- 将字符串str当成有效的表达式来求值并返回计算结果. 语法:eval(source[, globals[, locals]]) ---> value 参数: sour ...

  7. 第一百四十九节,封装库--JavaScript,表单验证--验证用户名

    封装库--JavaScript,表单验证--验证用户名 注册验证功能,顾名思义就是验证表单中每个字段的合法性,如果全部合法才可以提交表单. 效果图 聚集光标时 信息不合法是 信息合法时 html &l ...

  8. easy ui 验证框的使用

    Easy ui 插件之validatebox missingMessage:未填写时显示的信息validType:验证类型见下示例invalidMessage:无效的数据类型时显示的信息require ...

  9. Openstack(Kilo)安装系列之Keystone(四)

    创建租间.用户.角色 一.To configure prerequisites 1.Configure the authentication token: export OS_TOKEN=ADMIN_ ...

  10. 详略。。设计模式2——单例变形(多例).。。。studying

    ★ 缓存在单例中的使用("单例+缓存"技术) 缓存在编程中使用非常频繁,有着非常关键的数据,它可以帮助程序实现以空间换取时间, 通常被设计成整个应用程序所共享的一个空间,现要求实现 ...