2012-05-08 125 views
0

我正在开发一个SIP客户端。为此,我必须监听端口5060以接收SIP服务器消息。为此我编码了一些东西。 (我也参加项目管理员权限。)收听端口5060

WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
    bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator); 
    if (hasAdministrativeRight == true) 
    { 
     TcpListener server; 
     Int32 port = 5060; 
     IPAddress localAddr = IPAddress.Parse("127.0.0.1"); 
     server = new TcpListener(localAddr, port); 
     server.Start(); 
     Byte[] bytes = new Byte[256]; 
     String data = null; 
     while (true) 
     { 
      Console.Write("Waiting for a connection... "); 
      TcpClient client = server.AcceptTcpClient(); 
      Console.WriteLine("Connected!"); 
      data = null; 
      NetworkStream stream = client.GetStream(); 
      int i; 
      while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) 
      { 
       data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); 
       Console.WriteLine("Received: {0}", data); 
       data = data.ToUpper(); 

       byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); 
       stream.Write(msg, 0, msg.Length); 
       Console.WriteLine("Sent: {0}", data); 
      } 

      client.Close(); 
     } 
    } 

我得到SocketException:“试图通过其访问权限不允许的方式来访问套接字”(本地错误代码:10013)...

您对此有何建议?

回答

1

看来您正在运行两个应用程序,并且他们正在尝试使用 来访问相同的套接字。

什么Microsoft says about your problem

WSAEACCES(10013)

  • 翻译:许可被拒绝
  • 说明:试图 在访问插座通过访问禁止的方式权限。例如,如果使用广播地址 作为sendto,但广播权限未使用 setsockopt(SO_BROADCAST)设置,则会发生此错误。

    另一个可能的原因WSAEACCES 错误是,当绑定(Wsapiref_6vzm.asp)函数被调用(在 的Microsoft Windows NT的4.0的Service Pack 4 [SP4]或更高版本),另一种 程序,服务,或内核模式驱动程序绑定到具有独占访问权的相同地址 。这种独占访问是 Windows NT 4.0 SP4和更高版本的一项新功能,它通过使用SO_EXCLUSIVEADDRUSE选项使用 实现。

+0

是的,你是对的,它现在正在工作。 – lucky