UDP服務器:
using?System;using?System.Text;
using?System.Net;
using?System.Net.Sockets;
namespace?ConsoleUdpServer
{
class?Program
{
static?void?Main(string[]?args)
{
Socket?socket?=?new?Socket(AddressFamily.InterNetwork,
SocketType.Dgram,
ProtocolType.Udp);
EndPoint?localEP?=?new?IPEndPoint(IPAddress.Parse("127.0.0.1"),?8002);
socket.Bind(localEP);
//啟動異步接收
State?state?=?new?State(socket);
socket.BeginReceiveFrom(
state.Buffer,?0,?state.Buffer.Length,
SocketFlags.None,
ref?state.RemoteEP,
EndReceiveFromCallback,
state);
Console.ReadLine();
socket.Close();
}
//異步接收回調函數
static?void?EndReceiveFromCallback(IAsyncResult?iar)
{
State?state?=?iar.AsyncState?as?State;
Socket?socket?=?state.Socket;
try
{
//完成接收
int?byteRead?=?socket.EndReceiveFrom(iar,?ref?state.RemoteEP);
//顯示客戶端地址和端口
Console.WriteLine("客戶端終結點:{0}",?state.RemoteEP.ToString());
//顯示接收信息
Console.WriteLine("接收數據字節數:{0}",?byteRead);
string?message?=?Encoding.Default.GetString(state.Buffer,?0,?byteRead);
Console.WriteLine("來著客戶端信息:{0}",?message);
//向客戶端發送信息
SendMeaage(socket,?state.RemoteEP,?"成功接收!");
}
catch?(Exception?e)
{
Console.WriteLine("發生異常!異常信息:");
Console.WriteLine(e.Message);
}
finally
{
//非常重要:繼續異步接收
socket.BeginReceiveFrom(
state.Buffer,?0,?state.Buffer.Length,
SocketFlags.None,
ref?state.RemoteEP,
EndReceiveFromCallback,
state);
}
}
///?<summary>
///?向客戶端發送信息
///?</summary>
///?<param?name="socket">本地Socket(服務器Socket)</param>
///?<param?name="remoteEndPoint">客戶端終結點</param>
///?<param?name="Message">信息</param>
static?void?SendMeaage(Socket?socket,?EndPoint?remoteEndPoint,?string?Message)
{
byte[]?bytes?=?Encoding.Default.GetBytes(Message);
socket.SendTo(bytes,?remoteEndPoint);
}
}
///?<summary>
///?用於異步接收處理的輔助類
///?</summary>
class?State
{
public?State(Socket?socket)
{
this.Buffer?=?new?byte[1024];
this.Socket?=?socket;
this.RemoteEP?=?new?IPEndPoint(IPAddress.Any,?0);
}
///?<summary>
///?獲取本機(服務器)Socket
///?</summary>
public?Socket?Socket?{?get;?private?set;?}
///?<summary>
///?獲取接收緩沖區
///?</summary>
public?byte[]?Buffer?{?get;?private?set;?}
///?<summary>
///?獲取/設置客戶端終結點
///?</summary>
public?EndPoint?RemoteEP;
}
}
UDP客戶端
using?System;using?System.Text;
using?System.Net;
using?System.Net.Sockets;
namespace?ConsoleUdpClient
{
class?Program
{
static?void?Main(string[]?args)
{
Socket?socket?=?new?Socket(AddressFamily.InterNetwork,
SocketType.Dgram,
ProtocolType.Udp);
//客戶端使用的終結點
EndPoint?localEP?=?new?IPEndPoint(IPAddress.Any,?0);
socket.Bind(localEP);
//啟動異步接收
State?state?=?new?State(socket);
socket.BeginReceiveFrom(
state.Buffer,?0,?state.Buffer.Length,
SocketFlags.None,
ref?state.RemoteEP,
EndReceiveFromCallback,
state);
//向服務器發送信息
EndPoint?remoteEP?=?new?IPEndPoint(IPAddress.Parse("127.0.0.1"),?8002);
SendMeaage(socket,?remoteEP,?"妳好,這裏是客戶端,收到請回復!Over~~~~");
Console.ReadLine();
socket.Close();
}
//異步接收回調函數
static?void?EndReceiveFromCallback(IAsyncResult?iar)
{
State?state?=?iar.AsyncState?as?State;
Socket?socket?=?state.Socket;
try
{
//完成接收
int?byteRead?=?socket.EndReceiveFrom(iar,?ref?state.RemoteEP);
//顯示服務器地址和端口
Console.WriteLine("服務器終結點:{0}",?state.RemoteEP.ToString());
//顯示接收信息
Console.WriteLine("接收數據字節數:{0}",?byteRead);
string?message?=?Encoding.Default.GetString(state.Buffer,?0,?byteRead);
Console.WriteLine("來著服務器的信息:{0}",?message);
}
catch?(Exception?e)
{
Console.WriteLine("發生異常!異常信息:");
Console.WriteLine(e.Message);
}
finally
{
//非常重要:繼續異步接收
socket.BeginReceiveFrom(
state.Buffer,?0,?state.Buffer.Length,
SocketFlags.None,
ref?state.RemoteEP,
EndReceiveFromCallback,
state);
}
}
///?<summary>
///?向服務器發送信息
///?</summary>
///?<param?name="socket">本地Socket</param>
///?<param?name="remoteEndPoint">服務器終結點</param>
///?<param?name="Message">信息</param>
static?void?SendMeaage(Socket?socket,?EndPoint?remoteEndPoint,?string?Message)
{
byte[]?bytes?=?Encoding.Default.GetBytes(Message);
socket.SendTo(bytes,?remoteEndPoint);
}
}
///?<summary>
///?用於異步接收處理的輔助類
///?</summary>
class?State
{
public?State(Socket?socket)
{
this.Buffer?=?new?byte[1024];
this.Socket?=?socket;
this.RemoteEP?=?new?IPEndPoint(IPAddress.Any,?0);
}
///?<summary>
///?獲取本機Socket
///?</summary>
public?Socket?Socket?{?get;?private?set;?}
///?<summary>
///?獲取接收緩沖區
///?</summary>
public?byte[]?Buffer?{?get;?private?set;?}
///?<summary>
///?獲取/設置客戶端終結點
///?</summary>
public?EndPoint?RemoteEP;
}
}