日期:2014-05-17  浏览次数:20433 次

ASP.NET使用Socket调用HTTP接口调试才返回数据
using (Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) 
            { 
                client.Connect(IPAddress.Parse("192.168.1.7"), 80);//IP自己填 
  
                string content = "";//Send字符串自己按照规则拼接 
                client.Send(Encoding.Default.GetBytes(content)); 
  
                byte[] bytes = new byte[1000]; 
                client.Receive(bytes); 
  
                string recv = Encoding.Default.GetString(bytes);//这里是接收到的内容 
                //下面干你的活去吧 
            }


按照上面的方法调用接口,Recv返回数据格式为HTTP头和Body,为什么调试的时候HTTP头和Body都有,但是运行页面不调试的时候只有HTTP头,没有Body,请问怎么解决,多谢?

------解决方案--------------------
没有遇到过,可能是网络发送数据引起的,
client.Receive(bytes);  这句你直接这样写会出问题

------解决方案--------------------
加个循环和读取长度
int i=0
while(true){
if(client.Receive(bytes,0,bytes.length)<0){break;}
}
当然上面这句会造成阻塞,如果只是学习可以这样写来玩,如果要做实际的功能就得重新用一个思路了。
如你是读取的http协议,所以你提按照他的方式来读,先接收一部份数据,检查是事把header头读完毕,如果读完毕就解析头,并从头中得到content-length的长度,然后再根据这个值来读取剩下的,如果没有content-length那就用的分段发送再按分段发送的方式来读。这样就可以解决阻塞问题