Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚC#µÄUDPЭÒéµÄͬ²½ÊµÏÖ
 
×÷Õߣºjack_Meng
  3377  次浏览      27
 2020-12-22 
 
±à¼­ÍƼö:

±¾ÎÄÖ÷Òª²ÉÓÃsocketʵÏÖUDP¡¢²ÉÓÃUDPClientÀàʵÏÖÁ½¸öʾÀýÀ´½éÉÜC#µÄUDPЭÒéµÄͬ²½ÊµÏÖ¡£
±¾ÎÄÀ´×ÔÓÚÖªºõ£¬ÓÉ»ðÁú¹ûAnna±à¼­ÍƼö

Ò»¡¢ÕªÒª

×ܽá»ùÓÚC#µÄUDPЭÒéµÄͬ²½Í¨ÐÅ¡£

¶þ¡¢ÊµÑéÆ½Ì¨

Visual Studio 2010

Èý¡¢ÊµÑéÔ­Àí

UDP´«ÊäЭÒéͬTCP´«ÊäЭÒéµÄÇø±ð¿É²éÔÄÏà¹ØÎĵµ£¬´Ë´¦²»ÔÙ׸Êö¡£

ËÄ¡¢ÊµÀý

4.1 ²ÉÓÃsocketʵÏÖUDP

ÓÉÓÚUDPÊÇÒ»ÖÖÎÞÁ¬½ÓµÄЭÒé¡£Òò´Ë£¬ÎªÁËʹ·þÎñÆ÷Ó¦ÓÃÄܹ»·¢ËͺͽÓÊÕUDPÊý¾Ý°ü£¬ÔòÐèÒª×öÁ½¼þÊÂÇ飺

(1) ´´½¨Ò»¸öSocket¶ÔÏó£»

(2) ½«´´½¨µÄÌ×½Ó×Ö¶ÔÏóÓë±¾µØIPEndPoint½øÐа󶨡£

Íê³ÉÉÏÊö²½Öèºó£¬ÄÇô´´½¨µÄÌ×½Ó×Ö¾ÍÄܹ»ÔÚIPEndPointÉϽÓÊÕÁ÷ÈëµÄUDPÊý¾Ý°ü£¬»òÕß½«Á÷³öµÄUDPÊý¾Ý°ü·¢Ë͵½ÍøÂçÖÐÆäËûÈÎÒâÉ豸¡£Ê¹ÓÃUDP½øÐÐͨÐÅʱ£¬²»ÐèÒªÁ¬½Ó¡£ÒòΪÒìµØµÄÖ÷»úÖ®¼äûÓн¨Á¢Á¬½Ó£¬ËùÒÔUDP²»ÄÜʹÓñê×¼µÄSend()ºÍReceive()tÌ×½Ó×Ö·½·¨£¬¶øÊÇʹÓÃÁ½¸öÆäËûµÄ·½·¨£ºSendTo()ºÍReceiveFrom()¡£

SendTo()·½·¨Ö¸¶¨Òª·¢Ë͵ÄÊý¾Ý£¬ºÍÄ¿±ê»úÆ÷µÄIPEndPoint¡£¸Ã·½·¨ÓжàÖÖ²»Í¬µÄʹÓ÷½·¨£¬¿ÉÒÔ¸ù¾Ý¾ßÌåµÄÓ¦ÓýøÐÐÑ¡Ôñ£¬µ«ÊÇÖÁÉÙÒªÖ¸¶¨Êý¾Ý°üºÍÄ¿±ê»úÆ÷¡£ÈçÏ£º

SendTo(byte[] data,EndPoint Remote)

ReceiveFrom()·½·¨Í¬SendTo()·½·¨ÀàËÆ£¬µ«ÊÇʹÓÃEndPoint¶ÔÏóÉùÃ÷µÄ·½Ê½²»Ò»Ñù¡£ÀûÓÃrefÐÞÊΣ¬´«µÝµÄ²»ÊÇÒ»¸öEndPoint¶ÔÏ󣬶øÊǽ«²ÎÊý´«µÝ¸øÒ»¸öEndPoint¶ÔÏó¡£

UDPÓ¦Óò»ÊÇÑϸñÒâÒåÉϵÄÕæÕýµÄ·þÎñÆ÷ºÍ¿Í»§»ú£¬¶øÊÇÆ½µÈµÄ¹ØÏµ£¬¼´Ã»ÓÐÖ÷Óë´ÎµÄ¹ØÏµ¡£ÎªÁ˼ò±ãÆð¼û£¬ÈÔÈ»°ÑÏÂÃæµÄÕâ¸öÓ¦ÓýÐ×öUDP·þÎñÆ÷¡£

·þÎñÆ÷¶Ë´úÂ룺

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDP
{
class Program
{
static void Main(string[] args)
{
int recv;
byte[] data = new byte[1024];
//µÃµ½±¾»úIP£¬ÉèÖÃTCP¶Ë¿ÚºÅ
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 8001);
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//°ó¶¨ÍøÂçµØÖ·
newsock.Bind(ip);
Console.WriteLine ("This is a Server, host name is {0}", Dns.GetHostName());
//µÈ´ý¿Í»§»úÁ¬½Ó
Console.WriteLine("Waiting for a client");
//µÃµ½¿Í»§»úIP
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine (Encoding.ASCII.GetString(data, 0, recv));
//¿Í»§»úÁ¬½Ó³É¹¦ºó£¬·¢ËÍÐÅÏ¢
string welcome = "ÄãºÃ ! ";
//×Ö·û´®Óë×Ö½ÚÊý×éÏ໥ת»»
data = Encoding.ASCII.GetBytes (welcome);
//·¢ËÍÐÅÏ¢
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
while (true)
{
data = new byte[1024];
//·¢ËͽÓÊÕÐÅÏ¢
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);
}
}
}
}

¶ÔÓÚ½ÓÊÕÁ÷ÈëµÄUDP·þÎñÆ÷³ÌÐòÀ´Ëµ£¬±ØÐ뽫³ÌÐòÓë±¾µØÏµÍ³ÖÐÖ¸¶¨µÄUDP¶Ë¿Ú½øÐа󶨡£Õâ¾Í¿ÉÒÔͨ¹ýʹÓúÏÊʵı¾µØIPµØÖ·´´½¨Ò»¸öIPEndPoint¶ÔÏó£¬ÒÔ¼°ºÏÊʵÄUDP¶Ë¿ÚºÅ¡£ÉÏÊö·¶Àý³ÌÐòÖеÄUDP·þÎñÆ÷Äܹ»ÔÚ¶Ë¿Ú8001´ÓÍøÂçÉϽÓÊÕÈÎÒâÁ÷ÈëµÄUDPÊý¾Ý°ü¡£

UDP¿Í»§»ú³ÌÐòÓë·þÎñÆ÷³ÌÐò·Ç³£ÀàËÆ¡£

ÒòΪ¿Í»§»ú²»ÐèÒªÔÚÖ¸¶¨µÄUDP¶Ë¿ÚµÈ´ýÁ÷ÈëµÄÊý¾Ý£¬Òò´Ë£¬²»Ê¹ÓÃBind()·½·¨£¬¶øÊÇʹÓÃÔÚÊý¾Ý·¢ËÍÊ±ÏµÍ³Ëæ»úÖ¸¶¨µÄÒ»¸öUDP¶Ë¿Ú£¬¶øÇÒʹÓÃͬһ¸ö¶Ë¿Ú½ÓÊÕ·µ»ØµÄÏûÏ¢¡£ÔÚ¿ª·¢²úƷʱ£¬ÒªÎª¿Í»§»úÖ¸¶¨Ò»Ì×UDP¶Ë¿Ú£¬ÒÔ±ã·þÎñÆ÷ºÍ¿Í»§»ú³ÌÐòʹÓÃÏàͬµÄ¶Ë¿ÚºÅ¡£UDP¿Í»§»ú³ÌÐòÊ×Ïȶ¨ÒåÒ»¸öIPEndPoint£¬UDP·þÎñÆ÷½«·¢ËÍÊý¾Ý°üµ½Õâ¸öIPEndPoint¡£Èç¹ûÔÚÔ¶³ÌÉ豸ÉÏÔËÐÐUDP·þÎñÆ÷³ÌÐò£¬ÔÚIPEndPoint¶¨ÒåÖбØÐëÊäÈëÊʵ±µÄIPµØÖ·ºÍUDP¶Ë¿ÚºÅÐÅÏ¢¡£

¿Í»§¶Ë´úÂ룺

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDPClient
{
class Program
{
static void Main(string[] args)
{
byte[] data = new byte[1024];
string input, stringData;
//¹¹½¨TCP ·þÎñÆ÷
Console.WriteLine("This is a Client, host name is {0}", Dns.GetHostName());
//ÉèÖ÷þÎñIP£¬ÉèÖÃTCP¶Ë¿ÚºÅ
IPEndPoint ip = new IPEndPoint (IPAddress.Parse("127.0.0.1"), 8001);
//¶¨ÒåÍøÂçÀàÐÍ£¬Êý¾ÝÁ¬½ÓÀàÐͺÍÍøÂçЭÒéUDP
Socket server = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string welcome = "ÄãºÃ! ";
data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ip);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)sender;
data = new byte[1024];
//¶ÔÓÚ²»´æÔÚµÄIPµØÖ·£¬¼ÓÈë´ËÐдúÂëºó£¬¿ÉÒÔÔÚÖ¸¶¨Ê±¼äÄÚ½â³ý×èÈûģʽÏÞÖÆ
int recv = server.ReceiveFrom( data, ref Remote);
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine (Encoding.ASCII.GetString (data, 0, recv));
while (true)
{
input = Console.ReadLine();
if (input == "exit")
break;
server.SendTo (Encoding.ASCII.GetBytes(input), Remote);
data = new byte[1024];
recv = server.ReceiveFrom (data, ref Remote);
stringData = Encoding.ASCII.GetString (data, 0, recv);
Console.WriteLine(stringData);
}
Console.WriteLine ("Stopping Client.");
server.Close();
}
}
}

ÉÏÊö´úÂëµÄʵÏÖÂß¼­Îª£ºÏà¹ØÉèÖÃÍê³Éºó£¬·þÎñÆ÷¶ËÏÈÏò¿Í»§¶Ë·¢ËÍÐÅÏ¢£¬Ö®ºó¿Í»§¶Ëͨ¹ý¼üÅÌ·¢ËÍ×Ö·û´®£¬·þÎñÆ÷¶ËÊÕµ½ºóÔÙ·¢Ë͸ø¿Í»§¶Ë£¬Èç´ËÑ­»·¡£

4.2 ²ÉÓÃUDPClientÀàʵÏÖ

·þÎñÆ÷¶Ë´úÂ룺

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class Custom
{
// ÉèÖÃIP£¬IPV6
private static readonly IPAddress GroupAddress = IPAddress.Parse("IPµØÖ·");
// ÉèÖö˿Ú
private const int GroupPort = 11000;
private static void StartListener()
{
bool done = false;
UdpClient listener = new UdpClient();
IPEndPoint groupEP = new IPEndPoint(GroupAddress, GroupPort);
try
{
//IPV6£¬×é²¥
listener.JoinMulticastGroup(GroupAddress);
listener.Connect(groupEP);
while (!done)
{
Console.WriteLine("Waiting for broadcast");
byte[] bytes = listener.Receive(ref groupEP);
Console.WriteLine("Received broadcast from {0} :\n {1}\n", groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length));
}
listener.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public static int Main(String[] args)
{
StartListener();
return 0;
}
}

¿Í»§¶Ë´úÂ룺

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class Client
{
private static IPAddress GroupAddress = IPAddress.Parse("IPµØÖ·");
private static int GroupPort = 11000;
private static void Send(String message)
{
UdpClient sender = new UdpClient();
IPEndPoint groupEP = new IPEndPoint(GroupAddress, GroupPort);
try
{
Console.WriteLine("Sending datagram : {0}", message);
byte[] bytes = Encoding.ASCII.GetBytes(message);
sender.Send(bytes, bytes.Length, groupEP);
sender.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public static int Main(String[] args)
{
Send(args[0]);
return 0;
}
}

ÒÔÉÏ´úÂëÐèҪ˵Ã÷µÄÊÇ£º

(1) ÉÏÊö´úÂëÊÇ»ùÓÚIPV6µØÖ·µÄ×鲥ģʽ¡£IPv4ÖеĹ㲥(broadcast)¿ÉÒÔµ¼ÖÂÍøÂçÐÔÄܵÄϽµÉõÖÁ¹ã²¥·ç±©(broadcast storm)¡£ÔÚIPv6ÖоͲ»´æÔڹ㲥ÕâÒ»¸ÅÄîÁË£¬È¡¶ø´úÖ®µÄÊÇ×é²¥(multicast)ºÍÈÎÒâ²¥(anycast)¡£

(2) IPV6µØÖ·±íʾ·½·¨£º

a) X:X:X:X:X:X:X:X(ÿ¸öX´ú±í16λµÄ16½øÖÆÊý×Ö)£¬²»Çø·Ö´óСд£»

b) ÅÅÍ·µÄ0¿ÉÊ¡ÂÔ£¬±ÈÈç09C0¾Í¿ÉÒÔд³É9C0£¬0000¿ÉÒÔд³É0£»

c) Á¬ÐøÎª0µÄ×ֶοÉÒÔÒÔ::À´´úÌæ£¬µ«ÊÇÕû¸öµØÖ·ÖÐ::Ö»ÄܳöÏÖÒ»´Î£¬±ÈÈçFF01:0:0:0:0:0:0:1¾Í¿ÉÒÔ¼òд³ÉFF01::1¡£

(3) Èç¹ûÊDzÉÓô°ÌåµÄÐÎʽ½¨ÒéʹÓöàỊ̈߳¬ÈçÏÂÕâÖÖ¸ñʽ£¬·ñÔòÔÚ½ÓÊÕÊý¾Ýʱ¿ÉÄÜ»á³öÏÖËÀ»úµÄÏÖÏó¡£

// ´´½¨Ò»¸ö×ÓÏß³Ì
Thread thread = new Thread(
delegate()
{
try
{
//ÔÚÕâÀïдÄãµÄ´úÂë
}
catch (Exception )
{
}
}
);
thread.Start();

 

   
3377 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
.NET Core 3.0 Õýʽ¹«²¼£ºÐÂÌØÐÔÏêϸ½â¶Á
.NET Core²¿ÊðÖÐÄã²»Á˽âµÄ¿ò¼ÜÒÀÀµÓë¶ÀÁ¢²¿Êð
C# eventḬ̈߳²È«
¼òÎö .NET Core ¹¹³ÉÌåϵ
C#¼¼ÊõÂþ̸֮À¬»ø»ØÊÕ»úÖÆ(GC)
×îпγÌ
.NetÓ¦Óÿª·¢
C#¸ß¼¶¿ª·¢¼¼Êõ
.NET ¼Ü¹¹Éè¼ÆÓëµ÷ÊÔÓÅ»¯
ASP.NET Core Web ¿ª·¢
ASP.Net MVC¿ò¼ÜÔ­ÀíÓëÓ¦Óÿª·¢
³É¹¦°¸Àý
º½Ìì¿Æ¹¤¼¯ÍÅ×Ó¹«Ë¾ DotNetÆóÒµ¼¶Ó¦ÓÃÉè¼ÆÓ뿪·¢
ÈÕÕÕ¸Û¼¯ .NET Framewor
Éñ»ªÐÅ .NETµ¥Ôª²âÊÔ
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ