采用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校验,还显示了文件传输过程中的信息,在这一篇文章中,将介绍怎样实现传输文件的进度显示和实现选择保存文件路径. 首先,来实现一 ...
随机推荐
- Spring基础之AOP
一.AOP能解决什么问题 业务层每个service都要管理事务,在每个service中单独写事务,就会产生很多重复性的代码,而且修改事务时,需要修改源码,不利于维护.为此,把横向重复的代码,纵向抽取形 ...
- [翔哥高手无敌之路]0-002.如何提取apk中的信息?
面对一款apk软件,我们如何去获取它的信息,如何获取它的版本号,包名,或者ID,用户权限,这些信息都隐藏在apk包中的AndroidManifest.xml文件中,解开它我们就能获取任何想要的信息.但 ...
- 2018京东校招Java笔试题
相比阿里巴巴,京东的题都是考研基础题,加上一点java基础知识和linux命令. 1. 单选题(19道题,每题2分): 1)4个并发进程都需要5个同类资源,则至少需要多少个资源,才不会导致死锁? 2) ...
- 从Point类继承的Circle类 代码参考
#include <iostream> #include <cstring> using namespace std; class Point { private: int x ...
- 用Python做词云可视化带你分析海贼王、火影和死神三大经典动漫
对于动漫爱好者来说,海贼王.火影.死神三大动漫神作你肯定肯定不陌生了.小编身边很多的同事仍然深爱着这些经典神作,可见"中毒"至深.今天小编利用Python大法带大家分析一下这些神作 ...
- day 6 (笔记由图转)
.
- (一)用less+gulp+requireJs 搭建项目(了解less)
项目完结 做个总结: 公司网站重构,整站都需要重写,终于有机会接触下 less,gulp和requireJs,因为以前的工作就是写几个活动页,并没有机会用这些工具,废话不多说,先看下完成后的项目目录: ...
- Java实现 LeetCode 101 对称二叉树
101. 对称二叉树 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2 ...
- java实现顺时针螺旋填入
从键盘输入一个整数(1~20) 则以该数字为矩阵的大小,把 1,2,3-n*n 的数字按照顺时针螺旋的形式填入其中.例如: 输入数字 2,则程序输出: 1 2 4 3 输入数字 3,则程序输出: 1 ...
- java实现自行车行程
** 自行车行程** 计算行程 低碳生活,有氧运动.骑自行车出行是个好主意.小明为自己的自行车装了个计数器,可以计算出轮子转动的圈数.在一次骑车旅行中,出发时计算器的示数为begin,到达目的地时的示 ...