我试图与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