2013-07-22 212 views
0

我想弄清楚为什么下面的数组的客户端组件超出范围。我知道这发生在你尝试访问的数组元素不存在但我是Socket编程的新手,并试图编写我的第一个UDP脚本,但不知道如何处理它。UDP指数超出范围

客户端代码导致错误的ARGS [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

你实际上传递任何'ARGS []'运作'主()'? – Alfie

+0

不,我知道为了使args [0]工作,我必须传递一些信息给Main(),但在这种情况下,我不知道我想传递什么...也许服务器脚本中的字符串是假设的发送到客户端脚本,但不应该运行客户端脚本至少接受来自服务器的文本字符串? –

回答

0

错误是因为您没有将任何参数传递给客户端类中的Main()函数。

更改行:

UdpClient udpc = new UdpClient(2055); 

要:

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