UDP Sockets in C#
UDP provides an end-to-end service different from that of TCP.
In fact, UDP performs only two functions:
(1) it adds another layer of addressing (ports) to that of IP
(2) it detects data corruption that may occur in transit and discards any corrupted messages
Diffenence from TCP Sockets:
1. UDP sockets do not have to be connected before being used.
2. TCP is like telephone, and UDP is like email.
UDP Client
The typical UDP client goes through three steps:
1. Construct an instance of UdpClient, optionally specifying the local address and port.
2. Communicate by sending and receiving datagrams (byte arrays) using the Send() and
Receive() methods of UdpClient.
3. When finished, deallocate the socket using the Close() method of UdpClient.
UdpEchoClient.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Zeus.Thunder.Core;
using System.Net; // For IPEndPoint
using System.Net.Sockets; // For UdpClient, SocketException namespace SharpTrainer.NetWork
{
class UdpEchoClient : ITestCase
{
public void Run()
{
Console.Write("Input Server IP: ");
string server = Console.ReadLine(); Console.Write("Input Server Port: ");
int servPort = Int32.Parse(Console.ReadLine()); Console.Write("Input Echo String: ");
byte[] sendPacket = Encoding.ASCII.GetBytes(Console.ReadLine()); // Create a UdpClient instance
UdpClient client = new UdpClient();
try
{
// Send the echo string to the specified host and port
client.Send(sendPacket, sendPacket.Length, server, servPort);
Console.WriteLine("Sent {0} bytes to the server...", sendPacket.Length); // This IPEndPoint instance will be populated with the remote sender’s
// endpoint information after the Receive() call
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, ); // Attempt echo reply receive
byte[] rcvPacket = client.Receive(ref remoteIPEndPoint); Console.WriteLine("Received {0} bytes from {1}: {2}", rcvPacket.Length, remoteIPEndPoint,
Encoding.ASCII.GetString(rcvPacket, , rcvPacket.Length));
}
catch (SocketException se)
{
Console.WriteLine(se.ErrorCode + ": " + se.Message);
} client.Close();
}
}
}
UdpEchoServer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Zeus.Thunder.Core;
using System.Net; // For IPEndPoint
using System.Net.Sockets; // For UdpClient, SocketException namespace SharpTrainer.NetWork
{
class UdpEchoServer : ITestCase
{
public void Run()
{
Console.Write("Input Server Port: ");
int servPort = Int32.Parse(Console.ReadLine()); UdpClient client = null;
try {
// Create an instance of UdpClient on the port to listen on
client = new UdpClient(servPort);
} catch (SocketException se) {
Console.WriteLine(se.ErrorCode + ": " + se.Message);
Environment.Exit(se.ErrorCode);
} // Create an IPEndPoint instance that will be passed as a reference
// to the Receive() call and be populated with the remote client info
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, ); for (;;)
{
// Run forever, receiving and echoing datagrams
try {
// Receive a byte array with echo datagram packet contents
byte[] byteBuffer = client.Receive(ref remoteIPEndPoint);
Console.Write("Handling client at " + remoteIPEndPoint + " - ");
// Send an echo packet back to the client
client.Send(byteBuffer, byteBuffer.Length, remoteIPEndPoint);
Console.WriteLine("echoed {0} bytes.", byteBuffer.Length);
} catch (SocketException se) {
Console.WriteLine(se.ErrorCode + ": " + se.Message);
}
}
}
}
}
运行结果:
Server端:
Handling client at 127.0.0.1:65005 - echoed 18 bytes.
Client端:
Input Server IP: 127.0.0.1
Input Server Port: 9999
Input Echo String: Hello Master HaKu!
Sent 18 bytes to the server...
Received 18 bytes from 127.0.0.1:9999: Hello Master HaKu!
UDP Sockets in C#的更多相关文章
- Windows UDP sockets: recvfrom() fails with error 10054
https://stackoverflow.com/questions/34242622/windows-udp-sockets-recvfrom-fails-with-error-10054 #in ...
- 【Network】高性能 UDP 应该怎么做?
参考资料: EPOLL-UDP-GOLANG golang udp epoll - Google 搜索 go - golang: working with multiple client/server ...
- 开源免费的C/C++网络库(c/c++ sockets library)
(1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boo ...
- 开源免费的C/C++网络库(c/c++ sockets library)补充
(1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boo ...
- 【RL-TCPnet网络教程】第17章 RL-TCPnet之UDP通信
第17章 RL-TCPnet之UDP通信 本章节为大家讲解RL-TCPnet的UDP通信实现,学习本章节前,务必要优先学习第16章UDP用户数据报协议基础知识.有了这些基础知识之后,再搞本章 ...
- ss is one another utility to investigate sockets(特适合大规模tcp链接)
原创文章,转载请注明: 转载自系统技术非业余研究 本文链接地址: ss is one another utility to investigate sockets(特适合大规模tcp链接) 具体的可以 ...
- 开源免费的C/C++网络库(c/c++ sockets library)(转)
原文转自 http://blog.csdn.net/weiwangchao_/article/details/8730199 (1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨 ...
- TCP/UDP server
Simple: Sample TCP/UDP server https://msdn.microsoft.com/en-us/library/aa231754(v=vs.60).aspx Simple ...
- fuser - identify processes using files or sockets
FUSER(1) User Commands FUSER(1) NAME fuser - identify processes using files or sockets SYNOPSIS fuse ...
随机推荐
- [BZOJ4289][PA2012]TAX(最短路)
首先考虑一种暴力做法,为每条边拆成两条有向边,各建一个点.若某两条边有公共点,则在边所对应的点之间连一条边,权值为两条边中的较大值.这样跑最短路是$O(m^2\log m)$的. 用类似网络流中补流的 ...
- Redis 锁的实现方案
开发中不可避免的是碰到并发请求,在数据严谨性的要求不高时,我们也不需要做什么处理,但如果碰到数据严谨性非常高的时候(例如:用户金额,秒杀产品的库存...),我们就需要慎重处理了. 解决方案多种多样,下 ...
- JBoss 7 配置成windows启动服务
将Jboss7 server 配置成一个windows启动服务的两个文件,部署步骤如下: 1. 先检查是否配置java_home和jboss_home的环境变量,如没配置上先配置,如我的是JBO ...
- String是最基本的数据类型吗?
不是, 基本数据类型包括:byte,short,int,long,float,double,boolean,char. 而String是类代表字符串,属于引用类型,所谓引用类型包括:类,接口,数组.. ...
- BZOJ 3571 画框 KM算法 最小乘积最大权匹配
题意 有n个画框和n幅画.若第i幅画和第j个画框配对,则有平凡度Aij和违和度Bij,一种配对方案的总体不和谐度为∑Aij*∑Bij.求通过搭配能得到的最小不和谐度是多少. n <= 70. 分 ...
- wampserver3.1.0安装及配置
安装篇 环境:win10 64位+wamp3.1.0 为什么安装wamp3.1.0呢?php7早已正式发布了,还没有尝过鲜呢.点击进入wampserver下载地址 本以为下载后,执行exe文件,点ne ...
- mysql事件的开启和调用
检测事件是否开启 show variables like 'event_scheduler'; 开启事件 set global event_scheduler = on; 创建一个存储过程 delim ...
- 【iOS开发-图层】图层的获取与一些属性
图层 每个控件都有自己的一个图层,这个空间的全部东西就是显示在这个图层上面的,控件本身没有显示东西的功能,仅仅有拥有了图层才干显示东西 图层的获取 CALayer *layer = self.test ...
- Android支付接入之Google In-app-Billing
原文链接:http://www.mobile-open.com/2016/966337.html 因为公司需要接入Google的应用内支付(即Google的in-app Billing V3),接入过 ...
- Introducing ASP.NET Core: The New ASP.NET in Town!
The new version of ASP.NET is called ASP.NET Core (a.k.a ASP.NET 5) and it has the most significant ...