我试图制作简单click-to-call app
。我安装了星号服务器,我可以使用免费softphone
拨打电话。但是当我使用我的应用程序发送内容时,我得不到回复。
之前我没有使用套接字。可能就是这样。
这是我的代码:
string registerHeader = "REGISTER sip:asteriskip;transport=UDP SIP/2.0\r\n";
string toHeader = "To: <sip:1@asteriskip;transport=UDP>\r\n";
string fromHeader = "From: <sip:1@asteriskip;transport=UDP>\r\n";
string callId = "Call-ID: 1\r\n";
string CSeq = "CSeq: 1 REGISTER\r\n";
string expires = "Expires: 3600\r\n";
string via = "Via: SIP/2.0/UDP myip:myport;branch=z9hG4bK-1\r\n";
string maxF = "Max-Forwards: 70\r\n";
string UA = "User-Agent: MySoftphone\r\n";
string contact = "Contact: <sip:1@myip:myport;transport=UDP>\r\n";
string contLength = "Content-Length: 0\r\n\r\n";
Socket cl = new Socket(SocketType.Dgram, ProtocolType.Udp);
byte[] registerMsg = Encoding.ASCII.GetBytes(registerHeader + toHeader +
fromHeader + callId + CSeq + expires+via+maxF+UA+contact+contLength);
IPEndPoint server = new IPEndPoint(IPAddress.Parse("asteriskip"), 5060);
cl.Connect(server);
cl.Send(registerMsg);//(registerMsg, registerMsg.Length);
int bytesCount = 0;
do
{
byte[] response = new byte[] { };
cl.Receive(response);//(ref server);
bytesCount = response.Length;
string resp = Encoding.ASCII.GetString(response);
Console.WriteLine(resp);
}
while (bytesCount == 0);
Console.ReadKey();
此请求与softphone's
几乎相同,从wireshark
获取。但是softphone
得到了回复,而这个请求并没有。应该有注册CSeq 2,我试图发送它 - 仍然没有,如果我没有弄错,我应该在注册的第一部分之后收到类似401-Unauthorized
的内容。
答案 0 :(得分:0)
经过一番研究,我发现我缺少tag
参数。如果未设置tag
,则服务器会忽略请求。