首页 新闻 搜索 专区 学院

C#采用http协议通信,从服务器取不到完整数据

0
[待解决问题]

最大只能收到3838个字节,这个范围之内都能收到完整数据,大于这个范围也能收到同样大小的文件但3838个字节之后的内容为空,很纠结,望各位大侠出手相助:

(没有专家分,很抱歉,望不吝赐教)

这是实现采用http向服务器发信息并得到相应数据的代码:

1 public Stream send_Msg_0(string str)
2 {
3 send_Str = str;
4
5 HttpWebRequest myHttpReq = (HttpWebRequest)WebRequest.Create(str_url);
6 myHttpReq.ContentType = "application/x-www-form-urlencoded";
7
8 myHttpReq.Method = "POST";
9 myHttpReq.BeginGetRequestStream(new AsyncCallback(PostCallBack), myHttpReq);
10
11 m_object.WaitOne();
12 HttpWebResponse myHttpRes = (HttpWebResponse)myHttpReq.GetResponse();
13 Stream myStream = myHttpRes.GetResponseStream();
14
15 return myStream;
16 }
17
18 private void PostCallBack(IAsyncResult asy)
19 {
20 HttpWebRequest objReq = (HttpWebRequest)asy.AsyncState;
21 Stream obj_Stream = objReq.EndGetRequestStream(asy);
22
23 byte[] send_Msg_Arr = Encoding.Default.GetBytes(send_Str);
24
25 obj_Stream.Write(send_Msg_Arr, 0, send_Msg_Arr.Length);
26 obj_Stream.Close();
27 m_object.Set();
28 }

烈焰风暴的主页 烈焰风暴 | 初学一级 | 园豆:0
提问于:2011-05-07 23:00
< >
分享
所有回答(3)
0

是否 ContentLength没有设置,设置正确的HTTP头信息,参考

http://social.msdn.microsoft.com/Forums/en/netfxnetcom/thread/c8d62d9c-925d-43f9-9a36-c0546f028f05

2012 | 园豆:19163 (专家六级) | 2011-05-08 14:27
0

当每次读取数据的时候,它不一定是完全读出来的,有时候只是读了一半,你看看获取下来的byte[]前面和服务器上的一样,后面的全是0,就是楼主说的这种情况,循环读吧,直到所有的数据都读完。应该是这样!

天添 | 园豆:178 (初学一级) | 2011-05-18 16:56
Stream myStream = myhttp.send_Msg_0(str_mmsg);
BinaryReader bb = new BinaryReader(myStream);

byte[] byteArray = new byte[5000];
bb.Read(byteArray,0,5000);
"byte数组中只有前3900多个元素有数值,且正确,但myStream却有好几兆的数据",请问怎么循环读数据,关键是myStream的长度不能获得...
支持(0) 反对(0) 烈焰风暴 | 园豆:0 (初学一级) | 2011-05-21 09:48
看来是这个问题,嘿嘿,我原来也遇见过,Read这个方法就是这样有时候只读一部分,byte[]前3900有数据且正确,后面的都是0就是说它没有读完,myStream.Length就是长度啊!怎么获取不到呢?
支持(1) 反对(0) 天添 | 园豆:178 (初学一级) | 2011-05-23 10:29
0

应用程序不能对特定请求混合使用同步和异步方法。 如果调用 BeginGetRequestStream 方法,则必须使用 BeginGetResponse 方法检索响应。

丶Echo | 园豆:202 (菜鸟二级) | 2014-12-15 10:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册