2012-06-28 187 views
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(); 
+0

UDP不保證數據實際到達目的地。如果你需要確保你的數據到達設備,去TCP(當然,在不同的端口上:顯然你已經拿到了你從請求中獲得的那個端口)。另外,如果你的設備在移動網絡上,我非常懷疑它實際上是可以直接到達的。 – Alex

回答

1

解決了神祕,其實我是從WCF服務中提取TCP端口,並在該端口發送我的UDP消息,這是錯誤的。

現在,我必須在Device應用程序中爲UDP添加一個端口,並將我的消息發送到從WCF提取的IPAddress並確定了UDP端口。

相關問題