采用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校验,还显示了文件传输过程中的信息,在这一篇文章中,将介绍怎样实现传输文件的进度显示和实现选择保存文件路径. 首先,来实现一 ...
随机推荐
- Linux—vim/vi 翻页跳转命令快捷键
以下组合若没有特殊说明,基本都是键位组合. vim翻页 vim翻半页 ctr-d:向后翻半页 ctr-u:向前翻半页 vim整整页 ctr+f:向后翻整页 ctr+b:向前翻整页 vim跳转 vim跳 ...
- [COCOS2DX-LUA]0-001.利用ClippingNode实现放大镜功能
用过Iphone的都知道,Iphone在定位光标位置的时候会把内容进行放大,这样我们就能很快的把光标移动到指定的位置.那么在我们的Cocos2dX的游戏中,怎么可以实现这种功能呢.起先我就是想起了Ip ...
- [优文翻译]001.真正程序员该是什么样的(How To Be A Real Programmer)
01.Real Programmers don't write specs -- users should consider themselves lucky to get any programs ...
- Java IO(十五)FilterReader 和 FilterWriter、FilterReader 子类 PushBackReader
Java IO(十五)FilterReader 和 FilterWriter.FilterReader 子类PushBackReader 一.介绍 FilterReader 和 FilterWrite ...
- 使用fileupload组件
1. 进行文件上传时, 表单需要做的准备: 1). 请求方式为 POST: <form action="uploadServlet" method="post&qu ...
- Java实现 LeetCode 693 交替位二进制数(位运算)
693. 交替位二进制数 给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等. 示例 1: 输入: 5 输出: True 解释: 5的二进制数是: 101 示 ...
- Java实现 LeetCode 668 乘法表中第k小的数(二分)
668. 乘法表中第k小的数 几乎每一个人都用 乘法表.但是你能在乘法表中快速找到第k小的数字吗? 给定高度m .宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字. 例 ...
- Java实现 蓝桥杯VIP 基础练习 报时助手
题目描述 给定当前的时间,请用英文的读法将它读出来. 时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上"o'clock",如3:00读 ...
- Java实现 LeetCode 217 存在重复元素
217. 存在重复元素 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [1,2,3 ...
- Java实现 LeetCode 41 缺失的第一个正数
41. 缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: ...