问题描述
我正在通过tcp套接字从第三方软件(包括xml和2个图像)获取数据流。我对如何从中提取图像一无所知。
我将所有流数据保存在一个文本文件中,如下所示: Saved text file having full content received
我试图像下面那样剪切xml和图像并保存这些图像。但是图像显示无效或损坏,这表示我做错了。 您能帮我吗,如何提取图像。第三方没有透露太多有关数据的信息。但是从流中我可以假定它是二进制数据,并且我从字符串到字节或从字节到字符串的转换是错误的。我是第一次使用tcp监听器,请帮忙。 这是我的测试代码:
if (myNetworkStream.CanRead)
{
byte[] myReadBuffer = new byte[1024];
StringBuilder myCompleteMessage = new StringBuilder();
int numberOfBytesRead = 0;
// Incoming message may be larger than the buffer size.
do
{
numberOfBytesRead = myNetworkStream.Read(myReadBuffer,myReadBuffer.Length);
myCompleteMessage.AppendFormat("{0}",Encoding.ASCII.GetString(myReadBuffer,numberOfBytesRead));
if (numberOfBytesRead == myReadBuffer.Length)
{
allData.AddRange(myReadBuffer);
}
else if (numberOfBytesRead > 0)
{
allData.AddRange(myReadBuffer.Take(numberOfBytesRead));
}
}
while (myNetworkStream.DataAvailable);
// Print out the received message to the console.
traceWrapper.Writeinformation("You received the following message : " + myCompleteMessage);
string filepath = Path.Combine(@"C:\Temp","ReceivedFile_" + DateTime.Now.ToString().Replace("/","").Replace(".","").Replace(":","").Replace(" ","") + ".txt");
File.WriteallText(filepath,myCompleteMessage.ToString());
string bufferString = myCompleteMessage.ToString();
int noofboundary = 0;
while (!string.IsNullOrEmpty(bufferString))
{
if (bufferString.IndexOf("--boundary") > -1 && noofboundary == 0)//xml
{
bufferString = bufferString.Remove(0,bufferString.IndexOf("<ABC"));
int startindex = bufferString.IndexOf("<ABC");
int xmllength = bufferString.IndexOf("</ABC>")+ "</ABC>".Length;
string xmldata = bufferString.Substring(startindex,xmllength);
traceWrapper.WriteVerbose($" camera received xml extracted {xmldata}");
//xml extracted..remove the
bufferString = bufferString.Remove(0,bufferString.IndexOf("--boundary")); // remove up to xml
noofboundary++;
}
else if (bufferString.IndexOf("--boundary") > -1 && noofboundary == 1) // image1
{
bufferString = bufferString.Remove(0,bufferString.IndexOf("Content-ID: Picture1") + "Content-ID: Picture1".Length);
string image1string = bufferString.Substring(0,bufferString.IndexOf("--boundary"));
string image1path = Path.Combine(@"C:\Temp","image1_" + DateTime.Now.ToString().Replace("/","") + ".jpg");
File.WriteallBytes(image1path,Encoding.ASCII.GetBytes(image1string));
// xml extracted..remove the
bufferString = bufferString.Remove(0,bufferString.IndexOf("--boundary")); // remove up to image1
noofboundary++;
}
else if (bufferString.IndexOf("--boundary") > -1 && noofboundary == 2) // detection image
{
bufferString = bufferString.Remove(0,bufferString.IndexOf("Content-ID: Picture2") + "Content-ID: Picture2".Length);
string image2string = bufferString.Substring(0);
string image2imagepath = Path.Combine(@"C:\Temp","image2" + DateTime.Now.ToString().Replace("/","") + ".jpg");
File.WriteallBytes(image2imagepath,Encoding.ASCII.GetBytes(image2string));
bufferString = "";
noofboundary++;
}
}
}
else
{
traceWrapper.Writeinformation("Sorry. You cannot read from this NetworkStream.");
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)