返回字符
HTTP/1.1 200 OK
Date: Thu, 15 Nov 2007 01:09:49 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
Pragma: no-cache
cache-ctrol: no-cache
Content-Length: 1254
Content-Type: image/BMP
Expires: Thu, 15 Nov 2007 01:08:49 GMT
Set-Cookie: ASPSESSIONIDSQSQTRST=GOOONBLBJCDIBGFHALMMIPOH; path=/
Cache-control: privateBM?
这个MB?后面无法显示,这里应该就是图片了,但是我不知道怎么把图片弄到pictureBox1中
string picstr = this._data.Substring(this._header.Length+4);
byte[] s = (byte[])System.Text.Encoding.Default.GetBytes(picstr.Trim());
MemoryStream buf = new MemoryStream(s);
Image image = Image.FromStream(buf,true);
return image;
提示我说参数无效,picstr 是我从BM开始截取的,包含BM,头都大了,那位老大指点一下,感激不尽

解决方案 »

  1.   

    楼主,我看了你的代码,你的思路是对的。但是错在你已经把这个网页换成了文本。图片是二进制文件,转换成文本后很多字符是无法显示的,所有就会用'?'来替代。byte[] s  = (byte[])System.Text.Encoding.Default.GetBytes(picstr.Trim()); 这句代码你的本意是想把图片字符串还原成字节数组,但是还原后的字节数组根本不是原始图片的数据了,所以会提示你‘参数无效’。那该如何处理呢?这要根据http协议来处理。http协议用一句话概括就是:在tcp连接上发送一定格式的数据包。如果你对http协议比较了解,那处理这个数据包就很容易了。来看看那你收到的这个数据包,它包括两部分:响应头和实体内容,它们之间用一个空行隔开。响应头是告诉客户端这次通信的一些属性,包括实体大小,实体类型等。(具体可参考http协议);实体才是我们真正要接收的内容。当你用socket获取到服务器的响应流后,你不应该急着把它转换成字符串。因为服务器的响应不只是文本流,还包括二进制。
    你应该先把响应头取出来转换成文本(响应头数据一般都是ASCII文本数据),然后根据响应头当中的Content-Type标头来确定怎么处理空行后面的实体内容,如果是text/html,就把它转换成文本,如果是其他的如image/BMP,就应该以二进制(字节数组)或流的方式存储。当然你也可以根据你的URL来确定如何处理实体内容,例如URL请求的是网页不是文件,你就可以把它转换成文本,如果是一个图片地址,那你就只能以流的方式存储了。正确的得到实体内容后,你再用picturebox来显示就不会有错了。(另外picturebox本身具有显示网络图片的功能,只要给它的ImageLocation属性赋值为图片URL即可)
    正好我刚用C#写了个用socekt实现http协议的类,你可以参考下:
    http://blog.csdn.net/wo789/archive/2007/11/13/1882176.aspx
      

  2.   

    你何不直接分析HTML得到图片地址,然后放到pictureBox中去呢!!
      

  3.   

    哈哈 厉害 三叉神经痛 www.scsjt999.com