Тема: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?
Хай. От хочу спробувати цей протокол і написати на ньому сервер. Ну сервер, здається, є, звісно, він найпростіший, я ж тільки тренуюся. Клієнт теж є, але я не можу зрозуміти, як він має приймати дані? Я не можу запустити метод BeginReceiveFrom, тому що перед ним потрібно викликати метод Bind, окей, я викликаю Bind і запускаю один екземпляр клієнта - все працює, дані на сервер надходять. Але якщо я намагаюсь запустит ще один клієнт, то вистрілює помилка, що типу можна лише один раз викликати Bind для одної адреси. Як мені бути? Ось код клієнту
public static class Client
{
private static string host = "127.0.0.1";
private static int portReceive = 9061, portSend = 9060;
private static Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
private static byte[] buffer=new byte[1024];
private static IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(host),portSend);
private static EndPoint endPointSend = (EndPoint)ipEndPoint;
public static EndPoint endPointReceive = new IPEndPoint(IPAddress.Parse(host),portReceive);
public static void Start()
{
socket.Bind(endPointReceive);
socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref endPointReceive, new AsyncCallback(ReceiveCallback), socket);
}
private static void ReceiveCallback(IAsyncResult ar)
{
int n = socket.EndReceive(ar);
string str = Encoding.UTF8.GetString(buffer,0,n);
Console.WriteLine(str);
socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None,ref endPointReceive, new AsyncCallback(ReceiveCallback), socket);
}
public static void Send(string message)
{
byte[] buffer = Encoding.UTF8.GetBytes(message);
socket.BeginSendTo(buffer, 0, buffer.Length, SocketFlags.None, endPointSend, new AsyncCallback(SendCallback),
socket);
}
private static void SendCallback(IAsyncResult ar)
{
// Socket socket1 = (Socket) ar;
int n = socket.EndSendTo(ar);
}
}