我现在有个摄像头发送指令后我将返回的数据全部保存在一个数组里,这个数组长度是我自己定义的,怎么将长度设定刚好等于返回字节数啊 |
|
5分 |
不要传入Bytes.Length,你应该传入数据真正的长度,而不是把整个数组长度都写进去
|
int count=sendSocket.Receive(RecieveByte);
可以获取收到多少字节数的 |
|
而且你应该把协议做的更好一些,不要直接传图片文件流
起始4个字节写入后续总长度 收到后判断一下是否相符 这样如果收到的数据不完整就丢弃重发好了,不要把不完整的数据也转图片,一定会出错的 |
|
35分 |
第一个问题,“怎么将长度设定刚好等于返回字节数啊”:
这个要用一个循环来接,直到接完所有的数据为止。可以查看 http://msdn.microsoft.com/en-us/library/6y0e13d3(v=vs.110).aspx pre class=”brush: csharp”> while (true) { // while循环,不断的接取数据 bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes,0,bytesRec); // 这个地方不需要。直接用FileStream把接到的byte数据写到图片文件就可以。 if (data.IndexOf(“<EOF>”) > -1) { // 接收完毕,跳出 break; } } /pre> 第二个问题,如何转成图片。 我觉得不需要在内存里再new 一个memory stream。 在while循环外面new一个FileStream对象,然后在while循环内部把接到的byte数组写到文件里。 /div> |
data += Encoding.ASCII.GetString(bytes,0,bytesRec); // 这个地方不需要。直接用FileStream把接到的byte数据写到图片文件就可以。这个替换的该怎么写呢?我换成流的,依然提示参数无效 |
|
首先在while(true) 外面定义一个filestream: |
|
还有就是跳出条件,因为那句话不要了,所以跳出条件
if (data.IndexOf(“<EOF>”) > -1) { // 接收完毕,跳出 break; } 要改成: if(bytesRec==0) { break; } |