我对套接字和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个套装都是两个,一个是校验和差,一个是好的,其余两个都是相同的。
任何人都可以告诉我,我在这里遗漏了一些东西,我尝试了很多不同的东西,但据我所知,这只是它需要做的方式......?
提前致谢!
答案 0 :(得分:0)
要在两台计算机之间建立连接,您需要两个地址和两个端口。
从你的代码:
vpbx.12connect.com:5060
**.***.**.**:?
客户端端口通常由操作系统选择,因此可能不是5060。
要么以某种方式获取已使用的客户端端口并在SIP消息中传送此端口,要么在计算机上打开服务器,然后可以绑定到特定端口(例如5060)。
对于SIP,我建议采用服务器方法,因为你必须在不连接服务器之前接收消息(INVITES)。