0

我对套接字和 SIP 非常陌生,但我想创建一个 SIP 应用程序,我确信我有足够的编程经验,但我只需要向前推进即可开始。

问题是我没有从套接字得到响应,我只是不知道如何调试它。我在 12connect 创建了一个帐户,并获得了 SIP 服务器登录信息。现在,当我发送我们需要从 SIP 连接开始的“注册”消息时,它什么也不做。这是我用来发送消息的代码:

require 'tilt'

module Speaker

  HOST = "**.***.**.**"
  PORT = 5060

  SIP_HOST = "vpbx.12connect.com"
  SIP_USER = "username"
  SIP_PASS = "*********"

  class SIPServer

    def initialize

      EM.connect SIP_HOST, PORT, Speaker::SIPClient

    end

  end

  class SIPClient < EventMachine::Connection

    def post_init

      output = Tilt::ERBTemplate.new('tcp/register.erb').render(template_attributes)
      puts "\nSending: \n#{output}"
      send_data output

    end

    def receive_data data

      puts "From EM Socket: \n"+ data.to_s

    end

    def template_attributes
      {
        host: Speaker::HOST,
        port: Speaker::PORT,

        sip_host: Speaker::SIP_HOST,
        sip_user: Speaker::SIP_USER,
        sip_pass: Speaker::SIP_PASS
      }
    end

  end
end

这是发送的消息:

REGISTER sips:vpbx.12connect.com SIP/2.0
CSeq: 1 REGISTER
Via: SIP/2.0/TCP **.**.**.**:5060
From: <sips:username@vpbx.12connect.com>
To: <sips:username@vpbx.12connect.com>
Contact: <sips:username@**.***.**.**:5060>
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,SUBSCRIBE,NOTIFY,REFER,MESSAGE,INFO,PING
Expires: 3600
Content-Length: 0
Max-Forwards: 70

我在本地运行应用程序并将 5060 端口转发到运行此应用程序的 Mac。

编辑:

我在网络层看到的是从端口 50206 和 5060 到端口的 12 个 TCP 包。这些包从我的计算机本地 IP 到我的家庭 IP。还有 1 个从端口 50205 到 5060 的包,这个包来自我的计算机本地 IP 到 193.67.129.180 (vpbx.12connect.com)。12肯定是我发的测试信息,第二个就是上面说的信息。。

另一个值得注意的事情是 12 个包都经过了两个,一个校验和错误,一个校验和良好,其余两个相同。

谁能告诉我我在这里遗漏了一些东西,我尝试了很多不同的东西,但据我所知,这正是它需要完成的方式..?

提前致谢!

4

1 回答 1

0

要在两台机器之间建立连接,需要两个地址和两个端口。

从您的代码:

  • 服务器:vpbx.12connect.com:5060
  • 客户:**.***.**.**:?

客户端端口通常由操作系统选择,因此可能不是 5060。

要么您以某种方式获得使用的客户端端口,并在 SIP 消息中传达此端口,要么您在您的机器上打开一个服务器,然后您可以将其绑定到特定端口(例如 5060)。

对于 SIP,我建议使用服务器方法,因为您必须在 (INVITES) 之前在不连接到服务器的情况下接收消息。

于 2012-12-11T20:06:01.827 回答