c#基于socket的UDP服务器和客户端实例
基于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协议_服务器端 { //3,接收数据 static void ReceiveMessage() } |
客户端:
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协议_客户端 { while (true) udpClient.Close(); |
执行过程:
(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服务器和客户端实例相关推荐
- python应用系列教程——python使用socket创建udp服务器端和客户端
全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用socket创建udp服务器端和客户端. 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复. 客户端,等待用户 ...
- Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正
在Python核心编程(第3版)第2章网络编程中, 关于tcp/udp服务器和客户端实现代码的运行会出现 ['str' does not support the buffer interface]之类 ...
- 基于socket实现FTP服务器
基于socket实现FTP服务器 前言 基于socket完成了一个FTP服务器,实现了其基本功能 环境 操作系统:Windows 10企业版 LTSC 开发语言:C++ 开发工具:Visual Stu ...
- 基于Socket的游戏服务器通信框架的设计与实现
博客地址:blog.liujunliang.com.cn 开发工具:VS2017.Unity2017 本文介绍使用Socket/TCP来开发客户端与服务器端通信框架 博主使用过PhotonServer ...
- java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码
通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...
- python应用系列教程——python使用socket创建tcp服务器和客户端
全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用socket创建tcp服务器和客户端. 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复. 客户端,等待用户输 ...
- java服务端代码_Java Socket编程服务器响应客户端实例代码
通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...
- 【python网络编程】创建TCP/UDP服务器进行客户端/服务器间通信
客户端/服务器网络编程介绍 套接字:通信端点 实例:客户端发送数据,接收服务器返回的时间戳 用Python 编写FTP 客户端程序 客户端/服务器网络编程介绍 软件服务器也运行在一块硬件之上,但是没有 ...
- 基于Socket的UDP和TCP编程介绍
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
最新文章
- python输入文字字符串、如何提取某个汉字_python提取字符串中的汉字数字字母
- Buuctf(pwn) ciscn_2019_n_5
- MySQL 引擎特性 · InnoDB Buffer Pool
- 导出为Excel例子 java
- oracle+long列,oracle中对LONG列进行查询
- juyter显示决策树图形_关于决策树可视化的treePlotter(学习笔记)
- html+css做的丝带标签
- 服务器更新升级BIOS操作步骤
- 第1060期AI100_机器学习日报(2017-08-13)
- C#WPF内存回收与释放LierdaCracker
- p1633[进制应用]砝码称重
- 音乐服务器制作教程,分享硬盘中的音乐 DLNA服务搭建教程
- 绘声绘影X4 个人MV制作
- OpenCV手势识别-手掌特征提取
- NTP 时区+时间同步
- IPU相关知识(一)
- 浙大博士求助:华为总包50万,oppo约70万,选谁?
- 展讯平台GPIO调试方法
- 不平衡数据采样_过度采样不平衡数据的5种打击技术
- 最便宜的粤语语音机器人
热门文章
- java nio技术_攻破JAVA NIO技术壁垒
- centos 6.5 openldap php,centos6.5安装openldap+phpldapadmin
- make j4什么意思_为什么天天坚持撸铁 肌肉增长不明显
- 十年硬件老司机,结合实际案例,带你探索单片机低功耗设计!
- 入门人工智能,我究竟该学些什么?
- 鼠标的计算机基础知识,2、使用鼠标--电脑基础知识
- cesium three性能比较_mapboxgl + three 动画 — 网格热图
- tomcat的wget链接_Linux(jdk安装tomcat安装nginx安装gcc/wget)
- sql server 修改表字段
- bzoj 1221: [HNOI2001] 软件开发