基于Udp协议是无连接模式通讯,占用资源少,响应速度快,延时低。至于可靠性,可通过应用层的控制来满足。(不可靠连接)

使用Udp协议通讯需要具备以下几个条件:

(1).建立一个套接字(Socket)

(2).绑定服务器端IP地址及端口号--服务器端

(3).通过SendTo()方法向指定主机发送消息 (需提供主机IP地址及端口)

(4).通过ReciveFrom()方法接收指定主机发送的消息 (需提供主机IP地址及端口)

下面用代码实现简单的服务器---客户端通信

服务器端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace _023_socket编程_UDP协议_服务器端 {
class Program
{
private static Socket udpServer;
static void Main(string[] args) {
//1,创建socket
udpServer = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//2,绑定ip跟端口号
udpServer.Bind( new IPEndPoint ( IPAddress.Parse("192.168.1.101") ,7788 ) );

//3,接收数据
new Thread(ReceiveMessage){ IsBackground = true}.Start();
Console.WriteLine("服务器启动...");
Console.ReadKey();
}

static void ReceiveMessage()
{
while (true)
{
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = new byte[1024];
int length = udpServer.ReceiveFrom (data, ref remoteEndPoint);//这个方法会把数据的来源(ip:port)放到第二个参数上
string message = Encoding.UTF8.GetString(data, 0, length);
Console.WriteLine("从ip:" + (remoteEndPoint as IPEndPoint).Address.ToString() + ":" + (remoteEndPoint as IPEndPoint).Port + "收到了数据:" + message);
}

}
}
}

客户端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace _002_socket编程_udp协议_客户端 {
class Program {
static void Main(string[] args) {
//创建socket
Socket udpClient = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

while (true)
{
//发送数据
EndPoint serverPoint = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 7788);
string message = Console.ReadLine();
byte[] data = Encoding.UTF8.GetBytes(message);
udpClient.SendTo(data, serverPoint);
}

udpClient.Close();
Console.ReadKey();
}
}
}

执行过程:

(1)启动服务器

(2)启动客户端,并向服务器发送数据

//***************************2*************

C#使用UDP实现服务器与客户端通信

TCP 必须建立在连接才可以进行通信,
UDP不需要建立通信
但两者都需要监听来接收消息

服务端

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;namespace UDP_windows_服务器
{public partial class Form1 : Form{public Form1(){InitializeComponent();CheckForIllegalCrossThreadCalls = false;}/// <summary>/// 获取本地IP/// </summary>private void label1_Click(object sender, EventArgs e){string ip = IPAddress.Any.ToString();textBox1.Text = ip;}Socket server;private void button1_Click(object sender, EventArgs e){//1.创建服务器端电话server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//2.创建手机卡IPAddress iP = IPAddress.Parse(textBox1.Text);IPEndPoint endPoint = new IPEndPoint(iP, int.Parse(textBox2.Text));//3.将电话卡插进电话中(绑定端口号和IP)server.Bind(endPoint);listBox1.Items.Add("服务器已经成功开启!");//开启接收消息线程Thread t = new Thread(ReciveMsg);t.IsBackground = true;t.Start();}/// <summary>/// 向特定ip的主机的端口发送数据/// </summary>tevoid SendMsg(){//string hostName = Dns.GetHostName();   //获取本机名//IPHostEntry localhost = Dns.GetHostEntry(hostName);   //获取IPv6地址//IPAddress localaddr = localhost.AddressList[0];EndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse(textBox2.Text));string msg = textBox3.Text;server.SendTo(Encoding.UTF8.GetBytes(msg), point);}/// <summary>/// 接收发送给本机ip对应端口号的数据/// </summary>void ReciveMsg(){while (true){EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号byte[] buffer = new byte[1024 * 1024];int length = server.ReceiveFrom(buffer, ref point);//接收数据报string message = Encoding.UTF8.GetString(buffer, 0, length);listBox1.Items.Add(point.ToString() + ":" + message);}}private void button2_Click(object sender, EventArgs e){if (textBox3.Text != ""){//开启发送消息线程Thread t2 = new Thread(SendMsg);t2.Start();}}}
}

客户端

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;namespace UDP_windows_客户端
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 创建客户端/// </summary>Socket client;private void button1_Click(object sender, EventArgs e){///创建客户端client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);IPAddress iP = IPAddress.Parse(textBox1.Text);///端口号IPEndPoint endPoint = new IPEndPoint(iP, int.Parse(textBox2.Text));///建立与服务器的远程连接client.Connect(endPoint);///线程问题Thread thread = new Thread(ReciveMsg);thread.IsBackground = true;thread.Start(client);listBox1.Items.Add("客户端已成功开启!");}/// <summary>/// 向特定ip的主机的端口发送数据/// </summary>void SendMsg(){///获取IP与端口号EndPoint point = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));///发送内容string msg = textBox3.Text;///将数据发送到指定的ip的主机的端口client.SendTo(Encoding.UTF8.GetBytes(msg), point);}/// <summary>/// 接收发送给本机ip对应端口号的数据/// </summary>void ReciveMsg(object o){Socket client = o as Socket;while (true){try{///用来保存发送方的ip和端口号EndPoint point = new IPEndPoint(IPAddress.Any, 0);///定义客户端接收到的信息大小byte[] buffer = new byte[1024 * 1024];///接收到的信息大小(所占字节数)int length = client.Receive(buffer);string message = Encoding.UTF8.GetString(buffer, 0, length);listBox1.Items.Add(point.ToString() + ":" + message);}catch (Exception){client.Close();}}}private void button2_Click(object sender, EventArgs e){if (textBox3.Text != ""){//开启发送消息线程Thread t2 = new Thread(SendMsg);t2.Start();}listBox1.Items.Add(textBox3.Text);}private void Form1_Load(object sender, EventArgs e){}}
}

c#基于socket的UDP服务器和客户端实例相关推荐

  1. python应用系列教程——python使用socket创建udp服务器端和客户端

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用socket创建udp服务器端和客户端. 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复. 客户端,等待用户 ...

  2. Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正

    在Python核心编程(第3版)第2章网络编程中, 关于tcp/udp服务器和客户端实现代码的运行会出现 ['str' does not support the buffer interface]之类 ...

  3. 基于socket实现FTP服务器

    基于socket实现FTP服务器 前言 基于socket完成了一个FTP服务器,实现了其基本功能 环境 操作系统:Windows 10企业版 LTSC 开发语言:C++ 开发工具:Visual Stu ...

  4. 基于Socket的游戏服务器通信框架的设计与实现

    博客地址:blog.liujunliang.com.cn 开发工具:VS2017.Unity2017 本文介绍使用Socket/TCP来开发客户端与服务器端通信框架 博主使用过PhotonServer ...

  5. java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  6. python应用系列教程——python使用socket创建tcp服务器和客户端

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用socket创建tcp服务器和客户端. 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复. 客户端,等待用户输 ...

  7. java服务端代码_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  8. 【python网络编程】创建TCP/UDP服务器进行客户端/服务器间通信

    客户端/服务器网络编程介绍 套接字:通信端点 实例:客户端发送数据,接收服务器返回的时间戳 用Python 编写FTP 客户端程序 客户端/服务器网络编程介绍 软件服务器也运行在一块硬件之上,但是没有 ...

  9. 基于Socket的UDP和TCP编程介绍

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

最新文章

  1. python输入文字字符串、如何提取某个汉字_python提取字符串中的汉字数字字母
  2. Buuctf(pwn) ciscn_2019_n_5
  3. MySQL 引擎特性 · InnoDB Buffer Pool
  4. 导出为Excel例子 java
  5. oracle+long列,oracle中对LONG列进行查询
  6. juyter显示决策树图形_关于决策树可视化的treePlotter(学习笔记)
  7. html+css做的丝带标签
  8. 服务器更新升级BIOS操作步骤
  9. 第1060期AI100_机器学习日报(2017-08-13)
  10. C#WPF内存回收与释放LierdaCracker
  11. p1633[进制应用]砝码称重
  12. 音乐服务器制作教程,分享硬盘中的音乐 DLNA服务搭建教程
  13. 绘声绘影X4 个人MV制作
  14. OpenCV手势识别-手掌特征提取
  15. NTP 时区+时间同步
  16. IPU相关知识(一)
  17. 浙大博士求助:华为总包50万,oppo约70万,选谁?
  18. 展讯平台GPIO调试方法
  19. 不平衡数据采样_过度采样不平衡数据的5种打击技术
  20. 最便宜的粤语语音机器人

热门文章

  1. java nio技术_攻破JAVA NIO技术壁垒
  2. centos 6.5 openldap php,centos6.5安装openldap+phpldapadmin
  3. make j4什么意思_为什么天天坚持撸铁 肌肉增长不明显
  4. 十年硬件老司机,结合实际案例,带你探索单片机低功耗设计!
  5. 入门人工智能,我究竟该学些什么?
  6. 鼠标的计算机基础知识,2、使用鼠标--电脑基础知识
  7. cesium three性能比较_mapboxgl + three 动画 — 网格热图
  8. tomcat的wget链接_Linux(jdk安装tomcat安装nginx安装gcc/wget)
  9. sql server 修改表字段
  10. bzoj 1221: [HNOI2001] 软件开发