Сервер C# UdpClient и проблема с клиентом

Это код моего сервера

byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
UdpClient newsock = new UdpClient(ipep);

Console.WriteLine("Waiting for a client...");

IPEndPoint send = new IPEndPoint(IPAddress.Any, 0);

byte[] data1 = newsock.Receive(ref send);
int test1 = BitConverter.ToInt32(data1, 0);
Console.WriteLine("test1 = {0}", test1);

Это мой клиентский код

byte[] data = new byte[1024];
string stringData;
UdpClient server = new UdpClient("127.0.0.1", 9050);

IPEndPoint send = new IPEndPoint(IPAddress.Any, 0);

int test1 = 45;

byte[] data1 = BitConverter.GetBytes(test1);
server.Send(data1, data1.Length);

Согласно моему клиенту и серверу, клиент отправляет данные на сервер.

Но мое требование наоборот! и я не могу этого сделать .. Когда я пытаюсь добавить этот код на сервер

byte[] buffer = ASCIIEncoding.ASCII.GetBytes("Hello Client");
newsock.Send(buffer, buffer.Length);

Я получаю исключение как The operation is not allowed on non-connected sockets.

Кто-нибудь может мне помочь?


person Mafahir Fairoze    schedule 05.11.2010    source источник


Ответы (2)


Ознакомьтесь с JoinMulticastGroup (это как Connect for TCP-клиент). Вам нужно сделать это до трансляции (то есть, если вы проводите трансляцию).

Документация для UdpClient также будет полезна для ты.

person Austin Salonen    schedule 05.11.2010
comment
Многоадресная рассылка — это самостоятельное понятие. Типичное UDP-приложение клиент-сервер не будет использовать многоадресную рассылку. - person Ben Jackson; 05.11.2010
comment
@Ben: Достаточно честно, я предполагаю, что документация для UdpClient - это все, что действительно нужно OP. - person Austin Salonen; 05.11.2010

UDP не требует подключения. Когда вы вызываете connect в сокете UDP, вы просто устанавливаете IP-адрес и порт назначения по умолчанию. Получатель на другом конце должен использовать Socket.ReceiveFrom (называемый recvfrom в UNIX), чтобы узнать, откуда пришел пакет, а затем SendTo, чтобы ответить на первоначальный запрос. Сервер мог бы использовать connect, но это было бы неудобно, если бы вы хотели поддерживать несколько клиентов.

person Ben Jackson    schedule 05.11.2010