C# 建立UDP服务器并接收客户端数据

版权声明:本文为博主原创文章,未经博主允许不得转载。
服务器端对象类库:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net.Sockets;
- using System.Net;
- using System.Threading;
- using System.IO;
- namespace UdpChatExample
- {
- /// <summary>
- /// UDP服务器对象
- /// </summary>
- public class UDPServerClass
- {
- public delegate void MessageHandler(string Message);//定义委托事件
- public event MessageHandler MessageArrived;
- public UDPServerClass()
- {
- //获取本机可用IP地址
- IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
- foreach (IPAddress ipa in ips)
- {
- if (ipa.AddressFamily == AddressFamily.InterNetwork)
- {
- MyIPAddress = ipa;//获取本地IP地址
- break;
- }
- }
- Note_StringBuilder = new StringBuilder();
- PortName = 8080;
- }
- public UdpClient ReceiveUdpClient;
- /// <summary>
- /// 侦听端口名称
- /// </summary>
- public int PortName;
- /// <summary>
- /// 本地地址
- /// </summary>
- public IPEndPoint LocalIPEndPoint;
- /// <summary>
- /// 日志记录
- /// </summary>
- public StringBuilder Note_StringBuilder;
- /// <summary>
- /// 本地IP地址
- /// </summary>
- public IPAddress MyIPAddress;
- public void Thread_Listen()
- {
- //创建一个线程接收远程主机发来的信息
- Thread myThread = new Thread(ReceiveData);
- myThread.IsBackground = true;
- myThread.Start();
- }
- /// <summary>
- /// 接收数据
- /// </summary>
- private void ReceiveData()
- {
- IPEndPoint local = new IPEndPoint(MyIPAddress, PortName);
- ReceiveUdpClient = new UdpClient(local);
- IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0);
- while (true)
- {
- try
- {
- //关闭udpClient 时此句会产生异常
- byte[] receiveBytes = ReceiveUdpClient.Receive(ref remote);
- string receiveMessage = Encoding.Default.GetString(receiveBytes, 0, receiveBytes.Length);
- // receiveMessage = ASCIIEncoding.ASCII.GetString(receiveBytes, 0, receiveBytes.Length);
- MessageArrived(string.Format("{0}来自{1}:{2}", DateTime.Now.ToString(), remote, receiveMessage));
- //try
- //{
- // Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");
- // ReceiveUdpClient.Send(sendBytes, sendBytes.Length, local);
- //}
- //catch (Exception e)
- //{
- //}
- //break;
- }
- catch
- {
- break;
- }
- }
- }
- /// <summary>
- /// 添加日志信息到Note_StringBuilder
- /// </summary>
- public void AddMessage_Note_StringBuilder()
- {
- }
- }
- }
界面简单代码:
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- namespace UdpChatExample
- {
- public partial class UDPServerForm : Form
- {
- public UDPServerForm()
- {
- InitializeComponent();
- }
- public delegate void DelegateChangeText(string Messages);
- void ChangeTxt(string Messages)
- {
- string SBText = SB.ToString();
- SB.Remove(0, SB.Length);
- SB.Append(Messages + "\r\n" + SBText);
- richTextBox1.Text = SB.ToString();
- }
- StringBuilder SB = new StringBuilder();
- private void UDPServerForm_Load(object sender, EventArgs e)
- {
- }
- UDPServerClass UDPServerClass1;
- private void button1_Click(object sender, EventArgs e)
- {
- UDPServerClass1 = new UDPServerClass();
- UDPServerClass1.Thread_Listen();
- UDPServerClass1.MessageArrived += new UDPServerClass.MessageHandler(UDPServerClass1_MessageArrived);
- }
- void UDPServerClass1_MessageArrived(string Message)
- {
- richTextBox1 .Invoke (new DelegateChangeText(ChangeTxt),Message);
- }
- private void UDPServerForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- System.Environment.Exit(System.Environment.ExitCode);
- }
- }
- }
C# 建立UDP服务器并接收客户端数据的更多相关文章
- 【实验 1-2】编写一个简单的 UDP 服务器和 UDPP 客户端程序。程序均为控制台程序窗口。
1.服务器 #include<winsock2.h> //包含头文件#include<stdio.h>#include<windows.h>#pragma comm ...
- Python 绝技 —— UDP 服务器与客户端
i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 绝技 —— TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演 ...
- Linux系统编程(37)—— socket编程之UDP服务器与客户端
典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...
- 安卓作为udp服务器,PC作为客户端,仅监听
安卓客户端作为udp服务器,监听其他客户端的数据,测试已成功 本次实验所用数据: 安卓作为服务器: 端口:8888 IP:192.168.1.104 电脑作为客户端: 端口:50 ...
- 建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序
在Windows平台上主要有两个版本的Socket Api函数:WinSock 1.1和WinSock 2.2 , 2.2版本默认兼容1.1版本,1.1 winsock.h wsock32.lib w ...
- node.js中通过dgram数据报模块创建UDP服务器和客户端
node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...
- 10-51单片机ESP8266学习-AT指令(ESP8266连接路由器,建立TCP服务器,分别和C#TCP客户端和AndroidTCP客户端通信+花生壳远程通信)
http://www.cnblogs.com/yangfengwu/p/8871464.html 先把源码和资料链接放到这里 源码链接:https://pan.baidu.com/s/1wT8KAOI ...
- windows下UDP服务器和客户端的实现
UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据. 服务器端 1.初始化 WASStartup ( ... ) 2.创建Socket s ...
- 【卷二】网络三—UDP服务器与客户端
这是另一个类型的服务器/客户端,无连接的 UDP: (User Datagram Protocol) 用户数据报协议 参考: P58~P60 UDP 时间戳服务器 [时间戳 就是ctime()显示的内 ...
随机推荐
- AVCapture编程理解
AVCapture用于媒体采集,在媒体采集的流程中,会存在如下几个对象: AVCaptureDevice.这里代表抽象的硬件设备. AVCaptureInput.这里代表输入设备(可以是它的子类),它 ...
- Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配
/** 题目:Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配 链接:https://vjudge.net/proble ...
- linux常用指令--防火墙
centos7 iptables : 如果你想使用iptables静态路由规则,那么就禁用centos7默认的firewalld,并安装ipteables-services, 启用iptables和 ...
- 【vijos】1781 同余方程(拓展欧几里得)
https://vijos.org/p/1781 学习了下拓欧.. 求exgcd时,因为 a*x1+b*y1=a*x2+b*y2=b*x2+(a-b*[a/b])*y2 然后移项得 a*x1+b*y1 ...
- bootstrap基础学习十篇
bootstrap字体图标(Glyphicons) a.什么是字体图标 字体图标是在 Web 项目中使用的图标字体.虽然,Glyphicons Halflings 需要商业许可,但是您可以通过基于项目 ...
- nodejs之路探寻
在webpack配置中经常会发现 const path = require('path') 这是加载nodejs路径处理API,这个API主要包含下面三个方法 path.dirname(filepat ...
- db2 clob dbclob
DB2有三种类型的大字段: clob(Character Large OBjects ) 适用于存放单字节的字符串,当我们要保存的字符长度超过varchar的最大长度(32K)时,我们就要考虑使用cl ...
- node中的require和exports
http://cnodejs.org/topic/4f16442ccae1f4aa270010e9
- win 8升级win8.1的几个问题
对于习惯了win7来说的小朋友,win8的使用简直有种想砸电脑的冲动啊,特别是玩游戏的小朋友,win8各种bug.对于游戏.咳咳,我只是多说了,我们都是爱学习的好孩子,少玩游戏,少撸.简单说一 ...
- XShell上传和下载
工具:XShell 本地环境:win7操作系统 远程服务器环境:linux系统 1.将本地的文件上传到远程服务器上 可以使用rz命令 rz命令详细使用方法可以在xshell中输入:rz -h 2.将远 ...