我想知道如何修复这个代码。它是一个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
为它做一些有用的。