我对套接字和 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 个包都经过了两个,一个校验和错误,一个校验和良好,其余两个相同。
谁能告诉我我在这里遗漏了一些东西,我尝试了很多不同的东西,但据我所知,这正是它需要完成的方式..?
提前致谢!