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那就用的分段发送再按分段发送的方式来读。这样就可以解决阻塞问题