1
我在WCf中開發了一些服務,這些服務被智能設備消費,例如Android等如何在WCF中獲取客戶端IP地址和UDP端口?
我在設備調用WCF服務時獲取客戶端(設備)端點(IpAddress,端口)。之後,我在該IP地址和端口上發送UDP消息,但該UDP消息無法到達目的地。
可能存在一些問題,從客戶端提取端口,因爲服務可能位於HTTP上,並且我得到HTTP端口並在該端口不接受的端口上發送UDP消息。
請大家幫忙。
下面是代碼以提取客戶端ip地址和端口,並在這一點上
OperationContext context = OperationContext.Current;
MessageProperties messageProperties = context.IncomingMessageProperties;
var endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
int nRemotePort = 0;
string sRemoteAddress = "";
if (endpointProperty != null)
{
sRemoteAddress = endpointProperty.Address;
nRemotePort = endpointProperty.Port;
}
// ip地址了和端口發送UDP消息,現在發送UDP報文,以解決
UdpClient udpClient = new UdpClient();
udpClient.Connect(sRemoteAddress, nRemotePort);
string msgTag = ((DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Day.ToString().PadLeft(2, '0') + DateTime.Now.Year.ToString().PadLeft(4, '0')) + DateTime.Now.Hour.ToString().PadLeft(2, '0') + DateTime.Now.Minute.ToString().PadLeft(2, '0')) + DateTime.Now.Second.ToString().PadLeft(2, '0') + DateTime.Now.Millisecond.ToString().PadLeft(3, '0');
string msgBody = "786022^Successfully Connected to Server, now send Data";
string msg = "8^" + msgTag + "^45^1^0^" + msgBody.Length + Convert.ToChar(2).ToString() + msgBody + Convert.ToChar(4).ToString();
byte[] sendBytes = Encoding.ASCII.GetBytes(msg);
udpClient.Send(sendBytes, sendBytes.Length);
udpClient.Close();
UDP不保證數據實際到達目的地。如果你需要確保你的數據到達設備,去TCP(當然,在不同的端口上:顯然你已經拿到了你從請求中獲得的那個端口)。另外,如果你的設備在移動網絡上,我非常懷疑它實際上是可以直接到達的。 – Alex