C# 在windows服务内无限迭代中追加到字符串
我试图迭代通过UDP接收到的每个字节,并将该字节附加到字符串(sbCardNo)中。问题是每个字节的迭代都在while循环中,这意味着一个infinate循环(如果我理解正确的话)。如何调整下面的代码以将每个字节添加到字符串中C# 在windows服务内无限迭代中追加到字符串,c#,windows-services,C#,Windows Services,我试图迭代通过UDP接收到的每个字节,并将该字节附加到字符串(sbCardNo)中。问题是每个字节的迭代都在while循环中,这意味着一个infinate循环(如果我理解正确的话)。如何调整下面的代码以将每个字节添加到字符串中 private void DoWork() { byte[] data = new byte[1024]; IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8888);
private void DoWork()
{
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8888);
UdpClient newsock = new UdpClient(ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
StringBuilder sbCardNo = new StringBuilder();
while (true)
{
data = newsock.Receive(ref sender);
sbCardNo.Append(data.GetValue(0));
FileStream fs = new FileStream(folderPath + "\\AuthService.txt",
FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamwriter = new StreamWriter(fs);
m_streamwriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamwriter.WriteLine(sbCardNo);
m_streamwriter.Flush();
m_streamwriter.Close();
}
}
上述守则向我提供以下资料—
2
252
25267
2526748
252674848
25267484870
2526748487069
25267484870693
我只需要最后一行-252674870693
感谢在末尾创建文件,同时立即写入StringBuilder的所有内容,并为可能的异常处理逻辑 在本例中,在接收到字节“Z”之前读取,但如果通信的另一端发送单个字符串,或者前2个字节是将发送的字节长度,则读取效果要好得多
private void DoWork()
{
byte ch ;
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8888);
UdpClient newsock = new UdpClient(ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
StringBuilder sbCardNo = new StringBuilder();
while (true)
{
do
{
data = newsock.Receive(ref sender);
ch = data.GetValue(0)
sbCardNo.Append(ch);
} while (ch != 'Z') ;
using (StreamWriter m_streamwriter = new StreamWriter( folderPath + "\\AuthService.txt"))
{
m_streamwriter.WriteLine(sbCardNo.toString());
}
}
}
“我只需要最后一句话”?最后一行与倒数第二行有何不同?您如何知道何时到达?如果发送方发送的数据报由一个字节组成,那么您需要一个“消息结束”字节,以便知道何时中断循环。更好的解决方案是让发送方在单个数据报中发送整个值。另外,查看允许您打开进行追加的。如果有帮助,则结束字节始终为3?这可能有帮助。
3
是否可能存在于除结束字节以外的任何位置?如果您知道3
始终是最后一个字节,并且它从不存在于字符串的其余部分,那么您可以在收到3
后读取并附加到循环中并中断。开始字节始终是2,结束字节始终是3。之间的每个字节都是两位数。它可能包含一个3,但绝不是单独的。这似乎是可行的,但由于某种原因,服务无法接受任何其他UDP命令?@MattBaughan您是否得到和期望?你能调试一下并告诉我哪一行停止工作吗?请记住,我在接收时删除了无限循环,可能您收到一个“Z”,服务停止接收?没有报告异常。该服务将继续运行,但由于没有对传入UDP进行循环检查,因此它不会向文本文件写入更多UDP字符串。Cheers@MattBaughan我刚刚添加了一个“while(true)循环”,但我认为该协议还有改进的余地完美,我所做的唯一更改是替换文件修改-FileStream fs=newfilestream(folderPath+“\\AuthService.txt”、FileMode.OpenOrCreate、FileAccess.Write);StreamWriter m_StreamWriter=新StreamWriter(fs);m_streamwriter.BaseStream.Seek(0,SeekOrigin.End);m_streamwriter.WriteLine(sbCardNo);m_streamwriter.Flush();m_streamwriter.Close();