Tcp/IP监听器解析xml字符串输出建议(提供的代码没有正常工作)



我想知道如何修复这个代码。它是一个tcp/ip监听器

requestCount = requestCount + 1;
NetworkStream networkStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[1000025];
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
string dataFromClient =       System.Text.Encoding.ASCII.GetString(bytesFrom);
 dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));

var rap= XDocument.Parse(dataFromClient)
.Descendants("gag")
 .Select(n => new {
     re= n.Element("re").Value,
           we= n.Element("we").Value
 }).ToString();
Console.WriteLine(" >> Data from client : " + rap);
string serverResponse = "Last Message from client :"  + dataFromClient;
Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
networkStream.Write(sendBytes, 0, sendBytes.Length);
networkStream.Flush();
Console.WriteLine(" >> " + serverResponse);

监听如下字符串

<?xml version="1.0" >
 <tt>
            <gag>
                            <re>monkey</re>
                            <we>chicken</we>
            </gag>
            <sap>
                            <re>monkey</re>
                            <we>chicken</we>
            </sap>
</tt>

我试图在控制台显示只有猴子和鸡的输出,任何建议都会很感激,我仍然得到整个字符串,请不要只在评论中发布任何答案

非常感谢

byte[] bytesFrom = new byte[1000025];
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
string dataFromClient =       System.Text.Encoding.ASCII.GetString(bytesFrom);

哦,让我数数问题:

  • 一个巨大的缓冲区-不确定为什么;本身没有错,但几乎肯定是不明智的
  • 没有检查Read的回复-这是一个巨大的问题;它读取了多少数据?
  • 不循环读取所有数据,或读取(逻辑消息)的数据
  • 假设是ASCII -好吧,也许是ASCII;我个人只是缓冲字节,虽然

怀疑你可以这样做(假设客户端在发送后关闭其出站套接字):

// *remove* all the `Read` code etc
// ...
var rap= XDocument.Load(networkStream) // then as before

,这一切都将运行得很好。

如果客户端在发送后没有关闭它们的出站套接字,你将有一个更困难的时间。

编辑:正如Jon所说-你需要实际使用rap 为它做一些有用的

相关内容

  • 没有找到相关文章

最新更新