我試圖與XMPP通過TCP網絡套接字(StreamSocket
)(Jabber的)服務器進行通信,我用下面的代碼讀什麼服務器已經發送到我讀XML:UWP C#從StreamSocket
StreamSocket tcpSocket;
StreamReader reader;
int BUFFER_SIZE = 4096;
// Connecting to a remote XMPP server ....
reader = new StreamReader(tcpSocket.InputStream.AsStreamForRead());
string result;
while (true)
{
result = "";
while (true)
{
char[] buffer = new char[BUFFER_SIZE];
await reader.ReadAsync(buffer, 0, BUFFER_SIZE);
string data = new string(buffer);
// Detecting if all elements in the buffer array got replaced => there is more to read
if (data.IndexOf("\0") >= 0 || reader.EndOfStream)
{
result + data.Substring(0, data.IndexOf("\0"));
break;
}
result += data;
}
Debug.WriteLine(result);
}
我的代碼適用於長度爲< 4096個字符的字符串,但只要字符串獲取的時間超過4096個字符,它就會失敗(不會檢測到消息結束)。它會等待,直到它收到一個新的字符串< 4096個字符,連接兩個字符串並將它們返回爲一個字符串。
有沒有辦法獲得一個字符串的實際長度並連續讀取它們?
感謝您的幫助,但如果我使用'BUFFER_SIZE =(INT)(tcpSocket.InputStream.AsStreamForRead())長;',我得到一個System.NotSupportedException:該流不支持長度屬性因爲它不是可尋求的。 如果我使用'await reader.readToEndAsync()'它不會返回任何東西 - 它只會等待 – COM8
你可以通過'tcpSocket.InputStream.AsStreamForRead()'方法獲取流嗎? –
是的,它返回一個流對象,但是''''''''''對象不適用於它返回的這種流。 – COM8