2013-07-22 2 views
0

Я пытаюсь понять, почему клиентский компонент массива ниже находится за пределами допустимого диапазона. Я знаю, что это происходит, когда элемент массива, который вы пытаетесь получить доступ, не существует, но я новичок в программировании Socket и пытаюсь написать свой первый скрипт UDP, но не знаю, как с этим бороться.UDP-индекс за пределами допустимого диапазона

стороне клиента код вызывает ошибку в аргументах [0]:

class EmployeeUDPClient{ 
    public static void Main(string[] args){ 
     UdpClient udpc = new UdpClient(args[0],2055); //Line causing error 
     IPEndPoint ep = null; 
     while(true){ 
      Console.Write("Name: "); 
      string name = Console.ReadLine(); 
      if(name == "") break; 
      byte[] sdata = Encoding.ASCII.GetBytes(name); 
      udpc.Send(sdata,sdata.Length); 
      byte[] rdata = udpc.Receive(ref ep); 
      string job = Encoding.ASCII.GetString(rdata); 
      Console.WriteLine(job); 
     } 
    } 
} 

Это на стороне сервера код, который работает отлично:

class EmployeeUDPServer{ 
    public static void Main(){ 
     UdpClient udpc = new UdpClient(2055); 
     Console.WriteLine("Server started, servicing on port 2055"); 
     IPEndPoint ep = null; 
     while(true){ 
      byte[] rdata = udpc.Receive(ref ep); 
      string name = Encoding.ASCII.GetString(rdata); 
      string job = ConfigurationSettings.AppSettings[name]; 
      if(job == null) job = "No such employee"; 
      byte[] sdata = Encoding.ASCII.GetBytes(job); 
      udpc.Send(sdata,sdata.Length,ep); 
     } 
    } 
} 

Любые мысли о том, почему я получаю эта ошибка? Я запускаю 2 скрипта на одном компьютере, так что это может быть причиной?

+0

ли вы на самом деле передачи каких-либо 'арг []' функционировать 'Main()'? – Alfie

+0

Нет. Я знаю, что для того, чтобы args [0] работал, мне нужно передать что-то в Main(), но я не знаю, в этом случае, что я должен пройти ... Возможно, строка из сценария сервера допускается для отправки на скрипт клиента, но не должен ли клиентский скрипт запускать atleast, чтобы принять строку текста с сервера? –

ответ

0

Ошибка в том, что вы не передаете какие-либо аргументы функции Main() в вашем классе клиента.

Изменение линии:

UdpClient udpc = new UdpClient(2055); 

To:

string[] host = new string[1]; 
host[0] = "127.0.0.1"; 
UdpClient udpc = new UdpClient(host); 
+0

, так что я должен просто сделать случайный IP для каждого клиента, который у меня есть? Поддерживать один и тот же порт для всех клиентов и сервера? –

+0

ваш сервер должен использовать свое собственное подключение для прослушивания клиентов. Когда что-то пытается подключиться к нему, вы должны создать новый экземпляр своего класса клиента (на другом порту) и использовать его для приема соединения; оставляя исходный клиент/соединение с сервером для прослушивания большего количества клиентов. – Alfie

+0

Извините - я только что понял, что вы используете UDP doh! Это бесконтактный, поэтому вы должны использовать только один - слушать 127.0.0.1, и это должно быть так, я думаю – Alfie

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