UDP服务器:
using SystemText;
using SystemNet;
using SystemNetSockets;
namespace ConsoleUdpServer
{
class Program
{
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamilyInterNetwork,
SocketTypeDgram,
ProtocolTypeUdp);
EndPoint localEP = new IPEndPoint(IPAddressParse("127001"), 8002);
socketBind(localEP);
//启动异步接收
State state = new State(socket);
socketBeginReceiveFrom(
stateBuffer, 0, stateBufferLength,
SocketFlagsNone,
ref stateRemoteEP,
EndReceiveFromCallback,
state);
ConsoleReadLine();
socketClose();
}
//异步接收回调函数
static void EndReceiveFromCallback(IAsyncResult iar)
{
State state = iarAsyncState as State;
Socket socket = stateSocket;
try
{
//完成接收
int byteRead = socketEndReceiveFrom(iar, ref stateRemoteEP);
//显示客户端地址和端口
ConsoleWriteLine("客户端终结点:{0}", stateRemoteEPToString());
//显示接收信息
ConsoleWriteLine("接收数据字节数:{0}", byteRead);
string message = EncodingDefaultGetString(stateBuffer, 0, byteRead);
ConsoleWriteLine("来着客户端信息:{0}", message);
//向客户端发送信息
SendMeaage(socket, stateRemoteEP, "成功接收!");
}
catch (Exception e)
{
ConsoleWriteLine("发生异常!异常信息:");
ConsoleWriteLine(eMessage);
}
finally
{
//非常重要:继续异步接收
socketBeginReceiveFrom(
stateBuffer, 0, stateBufferLength,
SocketFlagsNone,
ref stateRemoteEP,
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 = EncodingDefaultGetBytes(Message);
socketSendTo(bytes, remoteEndPoint);
}
}
/// <summary>
/// 用于异步接收处理的辅助类
/// </summary>
class State
{
public State(Socket socket)
{
thisBuffer = new byte[1024];
thisSocket = socket;
thisRemoteEP = new IPEndPoint(IPAddressAny, 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 SystemText;
using SystemNet;
using SystemNetSockets;
namespace ConsoleUdpClient
{
class Program
{
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamilyInterNetwork,
SocketTypeDgram,
ProtocolTypeUdp);
//客户端使用的终结点
EndPoint localEP = new IPEndPoint(IPAddressAny, 0);
socketBind(localEP);
//启动异步接收
State state = new State(socket);
socketBeginReceiveFrom(
stateBuffer, 0, stateBufferLength,
SocketFlagsNone,
ref stateRemoteEP,
EndReceiveFromCallback,
state);
//向服务器发送信息
EndPoint remoteEP = new IPEndPoint(IPAddressParse("127001"), 8002);
SendMeaage(socket, remoteEP, "你好,这里是客户端,收到请回复!Over~~~~");
ConsoleReadLine();
socketClose();
}
//异步接收回调函数
static void EndReceiveFromCallback(IAsyncResult iar)
{
State state = iarAsyncState as State;
Socket socket = stateSocket;
try
{
//完成接收
int byteRead = socketEndReceiveFrom(iar, ref stateRemoteEP);
//显示服务器地址和端口
ConsoleWriteLine("服务器终结点:{0}", stateRemoteEPToString());
//显示接收信息
ConsoleWriteLine("接收数据字节数:{0}", byteRead);
string message = EncodingDefaultGetString(stateBuffer, 0, byteRead);
ConsoleWriteLine("来着服务器的信息:{0}", message);
}
catch (Exception e)
{
ConsoleWriteLine("发生异常!异常信息:");
ConsoleWriteLine(eMessage);
}
finally
{
//非常重要:继续异步接收
socketBeginReceiveFrom(
stateBuffer, 0, stateBufferLength,
SocketFlagsNone,
ref stateRemoteEP,
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 = EncodingDefaultGetBytes(Message);
socketSendTo(bytes, remoteEndPoint);
}
}
/// <summary>
/// 用于异步接收处理的辅助类
/// </summary>
class State
{
public State(Socket socket)
{
thisBuffer = new byte[1024];
thisSocket = socket;
thisRemoteEP = new IPEndPoint(IPAddressAny, 0);
}
/// <summary>
/// 获取本机Socket
/// </summary>
public Socket Socket { get; private set; }
/// <summary>
/// 获取接收缓冲区
/// </summary>
public byte[] Buffer { get; private set; }
/// <summary>
/// 获取/设置客户端终结点
/// </summary>
public EndPoint RemoteEP;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)