采用Socket实现UDP
------------恢复内容开始------------
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的更多相关文章
- 六、Socket之UDP异步传输文件-实现稳定的文件传输
上一篇文章五.Socket之UDP异步传输文件-实现传输中取消传送中,还遗留了一个传输文件最大的问题,就是传输过程中丢包,这样在文件传输过程中就会卡住了,这篇文章就来解决文件传输中的丢包问题,实现稳定 ...
- Dubbo底层采用Socket进行通信详解
由于Dubbo底层采用Socket进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下. n 通信理论 计算机与外界的信息交换称为通信.基本的通信方法有并行通信和串行通信两种. 1 ...
- Windows Socket的UDP和TCP编程介绍
1:网络中进程之间如何通信 为了实现进程之间通信,首要解决的问题是如何唯一标识一个进程,在本地可以通过进程PID来唯一标识一个进程,但是在网络中则是行不通的,其实TCP/IP协议族已经帮我们解决了这个 ...
- socket之UDP协议,并发编程介绍,操作系统发展史
socket之UDP协议 1.UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection 参考 ...
- C#的Socket实现UDP协议通信
今天稍花化了一点时间,利用C#的Socket验证了UDP的通信,为接下来特地利用UDP做个分布式的通信仿真系统打下基础.众所周知,UDP 就是用户数据报协议,在互联网参考模型的第四层——传输层.与TC ...
- Socket之UDP发送文件
内容导航 一. Socket之UDP异步传输文件 二.Socket之UDP异步传输文件 三.Socket之UDP异步传输文件-多文件传输和文件MD5校验 四.Socket之UDP异步传输文件-用 ...
- 二、Socket之UDP异步传输文件
上一篇文章一.Socket之UDP异步传输文件中,实现了文件的基本传输,但是传输过程中的信息是看不到的,这一篇是对上一篇进行了一些改进,并且可以了解传输的信息(加入了Log),还加入了接收或者拒绝接收 ...
- 三、Socket之UDP异步传输文件-多文件传输和文件MD5校验
本文接着上一篇文章二.Socket之UDP异步传输文件,在上一篇文章的基础上实现多文件的传输和文件传输完成后进行完整性校验. 要实现多文件的传输,必须要对文(2)中发送文件的数据格式进行改进,必须加入 ...
- 四、Socket之UDP异步传输文件-用控件显示文件传输进度
上一篇文章三.Socket之UDP异步传输文件中,实现了多文件的传输和MD5校验,还显示了文件传输过程中的信息,在这一篇文章中,将介绍怎样实现传输文件的进度显示和实现选择保存文件路径. 首先,来实现一 ...
随机推荐
- 5.CSS的引入方式
CSS的三种样式表 按照CSS样式书写的位置(或者引入的方式),CSS的样式表可以分为三大类: 1.行内样式表(行内式) <div style="color:red: font-siz ...
- Java四种访问修饰符
Java 四种访问权限 一.概述 访问等级比较:public > protected > default > private 无论是方法还是成员变量,这四种访问权限修饰符作用都一样 ...
- [wordpress使用]002_主题
使用WordPress作为博客内容管理系统有一个很大的好处是,WordPress拥有大量的优秀的免费模板.你所需要的是下载安装,和稍作修改.下面接着开始WordPress教程:WordPress主题 ...
- [SD心灵鸡汤]001.每月一则 - 2015.05
1.既然我的父母不能带给我荣耀,那我要做的就只是带给我的子女荣耀,而不是无聊的嫉妒眼红别人. 2.就人生游戏讲,男人是女人的玩物,女人是魔鬼的玩物.就爱情而言,女人是专业的,男人是业余的. 3.快乐使 ...
- python字母串查找基本操作
字符串查找基本操作主要分为三个关键词:find().index().count(). 这三个用法相同,格式都是为:自定义字符串名.关键词(‘子串’,开始位置,结束位置),开始和结束范围可不写. 1.f ...
- ClickHouse源码笔记1:聚合函数的实现
由于工作的需求,后续笔者工作需要和开源的OLAP数据库ClickHouse打交道.ClickHouse是Yandex在2016年6月15日开源了一个分析型数据库,以强悍的单机处理能力被称道. 笔者在实 ...
- OAuth + Security - 3 - JWT令牌
为什么使用JWT令牌 在上面的资源服务器中,通过配置,我们了解到,当我们拿着token去获取资源时,程序会先去调用远程认证服务器的端点去验证解析token,或者在本地解析校验token,这样毫无疑问, ...
- Java实现 LeetCode 695 岛屿的最大面积(DFS)
695. 岛屿的最大面积 给定一个包含了一些 0 和 1 的非空二维数组 grid . 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相 ...
- Java实现k个数乘(cheng)(自然数的k乘积问题)
k个数乘(cheng) 题目描述 桐桐想把一个自然数N分解成K个大于l的自然数相乘的形式,要求这K个数按从小到大排列,而且除了第K个数之外,前面(K-l)个数是N分解出来的最小自然数.例如:N=24, ...
- Java实现 LeetCode 85 最大矩形
85. 最大矩形 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [ ["1","0","1 ...