C # UdpClient проблема с сервером и клиентом - PullRequest
1 голос
/ 05 ноября 2010

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

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.

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

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

0 голосов
/ 05 ноября 2010

Оформить JoinMulticastGroup (это как Connect для TcpClient).Это необходимо сделать до трансляции (то есть, если вы вещаете).

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

...