------------恢复内容开始------------

1.1采用Socket实现UDP
1.1.1简介

Socket实现UDP的基本步骤如下:

(1)创建一个Socket对象

Socket mySocket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp);

AddressFamily 寻址类型

AddressFamily.InterNetwork代表IPV4。

SocketType 套接字类型

SocketType.Dgram表示使用数据报协议。

ProtocolType 协议类型

ProtocolType.Udp表示使用UDP协议

但需要注意的是套接字类型与协议类型并不是可以随便组合。如下表

2)将创建的套接字对象与本地IPEndPoint进行绑定。

完成上述步骤后,那么创建的套接字就能够在本地IPEndPoint上接收流入的UDP数据包,或者将流出的UDP数据包通过本地IPEndPoint发送到网络中其他任意设备。

mySocket.Bind(EndPointlocalEP)//绑定本地IP

SendTo()方法指定要发送的数据,和目标机器的IPEndPoint。该方法有多种不同的使用方法,可以根据具体的应用进行选择,但是至少要指定数据包和目标机器。如SendTo(byte[] data , EndPointRemote)

SocketFlags
提供 Socket 消息的常数值。

UDP应用不是严格意义上的真正的服务器和客户机,而是平等的关系,即没有主与次的关系。

ref 关键字指示按引用传递的值

ReceiveFrom()方法同SendTo()方法类似,但是使用EndPoint对象声明的方式不一样。利用ref修饰。接收方接收到数据后Remote为发送方的IP与端口信息。

如果发送方没有绑定,则发送方在发送的时候,操作系统会随机指定一个端口,接收方的Remote就是发送方随机确定的IP与端口。

ReceiveFrom()方法是一个阻塞方法,会一直等待,直到接收到数据才会往下执行程序。

int ReceiveFrom(byte[] data ,ref EndPointRemote)

实例:
 利用编程语言,基于TCP或者UDP编写一个简单的Client/Server 网络应用程序。要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户

------------恢复内容结束------------

 using System;
using System.Text; using System.Net; using System.Net.Sockets; namespace UDPServer {
class Program
{
static void Main(string[] args)
{
int recv;
byte[] data = new byte[];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, );
Socket SOCKET = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
SOCKET.Bind(ipep);
Console.WriteLine("这是主机, 主机:001" );
Console.WriteLine("等待客户机连接.........");
IPEndPoint sender = new IPEndPoint(IPAddress.Any, );
EndPoint Remote = (EndPoint)(sender);
recv = SOCKET.ReceiveFrom(data, ref Remote);
Console.WriteLine("服务端:001, 客户端{0}, 连接成功: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, , recv));
string welcome = "------------------------------------------- ";
data = Encoding.ASCII.GetBytes(welcome);
SOCKET.SendTo(data, data.Length, SocketFlags.None, Remote); while (true) { data = new byte[];
recv = SOCKET.ReceiveFrom(data, ref Remote);
Console.WriteLine("接收信息:{0}", Encoding.ASCII.GetString(data, , recv));
string str = System.Text.Encoding.ASCII.GetString(data);
str = str.ToUpper();
data = System.Text.Encoding.ASCII.GetBytes(str);
SOCKET.SendTo(data, recv, SocketFlags.None, Remote); } } } }
 using System;

 using System.Collections.Generic;

 using System.Text;

 using System.Net;

 using System.Net.Sockets;

 namespace UDPClient

 {

     class Program

     {

         static void Main(string[] args)

         {

             byte[] data = new byte[];
string input, stringData;
Console.WriteLine("这是客户端, 用户:张三");
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), );
Socket SCOKET1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string welcome = "--------------------------!";
data = Encoding.ASCII.GetBytes(welcome);
SCOKET1.SendTo(data, data.Length, SocketFlags.None, ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, );
EndPoint Remote = (EndPoint)sender;
data = new byte[];
int recv = SCOKET1.ReceiveFrom(data, ref Remote);
Console.WriteLine("连接到服务端信息:{0}: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, , recv)); while (true)
{
Console.WriteLine("请输入发送信息:");
input = Console.ReadLine();
if (input == "exit")
break;
SCOKET1.SendTo(Encoding.ASCII.GetBytes(input), Remote);
data = new byte[];
recv = SCOKET1.ReceiveFrom(data, ref Remote);
stringData = Encoding.ASCII.GetString(data, , recv);
Console.WriteLine("返回信息:");
Console.WriteLine(stringData);
Console.WriteLine(); }
Console.WriteLine("关闭客户端");
SCOKET1.Close();
} } }

采用Socket实现UDP的更多相关文章

  1. 六、Socket之UDP异步传输文件-实现稳定的文件传输

    上一篇文章五.Socket之UDP异步传输文件-实现传输中取消传送中,还遗留了一个传输文件最大的问题,就是传输过程中丢包,这样在文件传输过程中就会卡住了,这篇文章就来解决文件传输中的丢包问题,实现稳定 ...

  2. Dubbo底层采用Socket进行通信详解

    由于Dubbo底层采用Socket进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下. n  通信理论 计算机与外界的信息交换称为通信.基本的通信方法有并行通信和串行通信两种. 1 ...

  3. Windows Socket的UDP和TCP编程介绍

    1:网络中进程之间如何通信 为了实现进程之间通信,首要解决的问题是如何唯一标识一个进程,在本地可以通过进程PID来唯一标识一个进程,但是在网络中则是行不通的,其实TCP/IP协议族已经帮我们解决了这个 ...

  4. socket之UDP协议,并发编程介绍,操作系统发展史

    socket之UDP协议 1.UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection 参考 ...

  5. C#的Socket实现UDP协议通信

    今天稍花化了一点时间,利用C#的Socket验证了UDP的通信,为接下来特地利用UDP做个分布式的通信仿真系统打下基础.众所周知,UDP 就是用户数据报协议,在互联网参考模型的第四层——传输层.与TC ...

  6. Socket之UDP发送文件

    内容导航 一. Socket之UDP异步传输文件    二.Socket之UDP异步传输文件 三.Socket之UDP异步传输文件-多文件传输和文件MD5校验 四.Socket之UDP异步传输文件-用 ...

  7. 二、Socket之UDP异步传输文件

    上一篇文章一.Socket之UDP异步传输文件中,实现了文件的基本传输,但是传输过程中的信息是看不到的,这一篇是对上一篇进行了一些改进,并且可以了解传输的信息(加入了Log),还加入了接收或者拒绝接收 ...

  8. 三、Socket之UDP异步传输文件-多文件传输和文件MD5校验

    本文接着上一篇文章二.Socket之UDP异步传输文件,在上一篇文章的基础上实现多文件的传输和文件传输完成后进行完整性校验. 要实现多文件的传输,必须要对文(2)中发送文件的数据格式进行改进,必须加入 ...

  9. 四、Socket之UDP异步传输文件-用控件显示文件传输进度

    上一篇文章三.Socket之UDP异步传输文件中,实现了多文件的传输和MD5校验,还显示了文件传输过程中的信息,在这一篇文章中,将介绍怎样实现传输文件的进度显示和实现选择保存文件路径. 首先,来实现一 ...

随机推荐

  1. JavaScript的流程控制语句以及函数

    一.流程控制 1. 作用:控制代码的执行顺序 2. 分类 2.1顺序结构:从上到下依次执行代码语句 2.2选择结构: 1. if语句 简单if结构 if(条件表达式){ 表达式成立时执行的代码段 } ...

  2. toString()方法的使用

    toString()方法: java.lang.Object类的toString()方法的定义如下: public String toString(){ return getClass().getNa ...

  3. PMP | 备考笔记

    (持续更新......) 五大过程组和十大知识领域是PMP的重要组成部分,也是这门课的重点线索,本文会逐步迭代.渐进明细的来补充完善这个体系. (先放个图吧) 以下每个模块记录自己有点模糊的地方 项目 ...

  4. 公司如何通过电脑监控来规范员工行为-iis7服务器管理功能教程

    现在员工办公基本都用电脑,而电脑不仅仅可以用来处理工作,还可以上网.娱乐等.往往很多员工的自制能力比较差,在工作时间和人聊天,浏览购物网站,看新闻,炒股等休闲娱乐上花费大量的时间,导致工作效率降低,影 ...

  5. Vue3.0+ElementUI打包之后,为什么部分页面按钮图标找不到

    有的页面可以显示这个按钮,有的页面不可以,找了好久,看这都webpack路径问题,到但是我这个没有webpack,没有build文件夹,最后发现是因为没有绑定点击事件 加上这个之后就好了

  6. java方法句柄-----3.方法句柄的实现接口

    目录 1.使用方法句柄实现接口 1.使用方法句柄实现接口   2.3节介绍的动态代理机制可以在运行时为多个接口动态创建实现类,并拦截通过接口进行的方法调用.方法句柄也具备动态实现一个接口的能力.这是通 ...

  7. Java实现 LeetCode 561 数组拆分 I(通过排序算法改写PS:难搞)

    561. 数组拆分 I 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), -, (an, bn) ,使得从1 到 n 的 min(ai, bi ...

  8. Java实现蓝桥杯 历届试题 k倍区间

    历届试题 k倍区间 时间限制:2.0s 内存限制:256.0MB 问题描述 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j) ...

  9. Java实现 蓝桥杯VIP 算法训练 连接字符串

    算法训练 连接字符串 时间限制:1.0s 内存限制:512.0MB 编程将两个字符串连接起来.例如country与side相连接成为countryside. 输入两行,每行一个字符串(只包含小写字母, ...

  10. java计算时间从什么时候开始 为什么从1970年开始 java的时间为什么是一大串数字

    Date date = new Date(0); System.out.println(date); 打印出来的结果: Thu Jan 01 08:00:00 CST 1970 也是1970 年 1 ...