2010-11-05 3 views
1

Это мой код сервера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.

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

ответ

-2

Отъезд JoinMulticastGroup (это как Подключиться для TcpClient). Вам необходимо сделать это до трансляции (то есть, если вы ведете трансляцию).

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

+0

Multicast - это независимая концепция. Типичное клиентское серверное UDP-приложение не будет использовать многоадресную рассылку. –

+0

@Ben: Я достаточно догадываюсь, что документация для UdpClient - это все, что действительно нужно OP. –

3

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

Смежные вопросы