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);
        }
    }
}

时间: 2024-10-19 11:14:39

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

uip UDP 服务器广播模式(客户端可以任意端口,并且主动向客户端发送数据)

目前移植uip,发现UDP 服务器模式下,必须指定本地端口以及客户端端口,否则只能讲客户端端口设置为0,才能接收任意端口的数据,但是无法发送数据,因为此时客户端端口设置为0了,我通过将原始数据包中的客户端端口保存下来,并且在发送的时候将客户端端口替换为指定的端口,发送完成之后又设置为0,这样就实现了向任意客户端端口发送数据. uip.c if(uip_udp_conn->lport != 0 && UDPBUF->destport == uip_udp_conn->lpo

android 客户端访问自己建立的服务器并返回JSON数据进行解析学习

最近在找关于客户端访问服务器开发的用例 总是去访问别人的网站也不能对里面的数据进行修改也不知道是怎么实现的,自己在网上申请了一个免费的服务器网站上传了一个php文件,现在就可以通过urlStr===http://1.hellowes.sinaapp.com/访问服务器上的信息了,并且服务器会返回一个数据,由于对php一点不懂所以服务器上返回的并不是真正的JSON数据,所以只好通过客户端字符串组合成一个JSON语句通过JSONObject进行解析出来, 下面贴出实现代码,总算是可以从服务器上获取信

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

i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 绝技 -- TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演示了 TCP 服务器与客户端的通信过程. 本篇将按照同样的套路,先介绍传输层的另一个核心协议 UDP,再比较 TCP 与 UDP 的特点,最后借助 Python 脚本演示 UDP 服务器与客户端的通信过程. 0x01 UDP 协议 UDP(User Datagram Protocol,用户数据报协议

【windows socket+UDP服务器客户端】

Windows Socket+UDP服务器客户端 Winsock是 Windows下套接字标准.                    1.UDP socket编程:          UDP(用户数据报协议)是一个无连接,不可靠的数据传输,其特点是简单,快捷.相比与TCP,UDP不需要建立连接(不需connect.accept函数),数据发送接收之后,不需要终止连接.基于UDP的程序,避免了TCP运行的开销,在效率与速度上具有更好的表现.          UDP是无连接的,可能会有数据的丢失

socket编程:简单UDP服务器/客户端编程

对于之前的TCP协议而言,他是可靠的字节流传输,而在socket编程中,在不需要保证数据传输正确安全的情况下.或者由用户自己完成传输确认情况/服务端客户端自己实现数据传输.套接字编程也提供了UDP协议的方法. 基于UDP(不是面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)和服务器端进行通信(sendto) (3)关闭套接字 因为在socket编程中,UDP是针对数据报的数据传输,所以socket专门定义了UDP所使用的函数接口.

TCP 同步传输:客户端发送,服务器段接收

1.服务器端程序 可以在TcpClient上调用GetStream()方法来获的链接到远程计算机的网络流NetworkStream.当在客户端调用时,他获的链接服务器端的流:当在服务器端调用时,他获得链接客户端的流. class Program { static void Main(string[] args) { const int BufferSize = 8192;//缓存大小 Console.WriteLine("server is running ..."); IPAddre

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

node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dgram'); //创建upd套接字 //参数一表示套接字类型,'udp4' 或 'udp6' //参数二表示事件监听函数,'message' 事件监听器 let server = dgram.createSocket('udp4'); //绑定端口和主机地址 server.bind(8888, '1

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

UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据. 服务器端 1.初始化 WASStartup ( ... ) 2.创建Socket s = socket ( .. ) 3.绑定 bind( .. ) 4.收发数据 recvfrom( .. ) sendto(..) 5.关闭连接,释放资源 closesocket(..) WSACleanup() 客户端 // 无需绑定 1.初始化 WASStartup ( ... ) 2.创建Socket s =

java——UDP发送和接收数据

package com.socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; /** * 需求: 通过UDP传输方式,将一段文字发送出去 * 1.建立ud