socket通过HTTP代理连接服务器问题

zlx105 2010-09-29 03:03:29
如题:
客户端已经成功通过socket连接到代理服务器(在代理软件端有检测结果,可以看到)

temp.Format("CONNECT %s:%s HTTP/1.1\r\nUser-Agent: MyApp/0.1\r\n\r\n", myIp,myPort);
send(sockClient,temp,strlen(temp)+1,0);//向代理服务器发送
recv(sockClient, recvBuf,1000,0);//从代理服务器上接收XML
其中recvBuf的返回值为“HTTP/1.0 200 Connection established。。。”,是正确的

在以上步骤完成后,通过
send(sockClient, sendXML, strlen(sendXML), 0);
recv(sockClient, recvBuf123,1000,0);//从服务器上接收XML
但是recvBuf123的返回时 空 的,并且提示
HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Wed, 29 Sep 2010 06:59:29 GMT
Connection: close
Content-Length: 34

<h1>Bad Request (Invalid URL)</h1>
为什么提示“BadRequest”呢?难道是组织的sendXML有问题?但是不通过代理的时候,还是用
send(sockClient, sendXML, strlen(sendXML), 0);
recv(sockClient, recvBuf123,1000,0);//从服务器上接收XML
是能够正确得到返回值的

诚请各位指教啊。。。。急求?

...全文
223 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
visualwind 2010-09-30
  • 打赏
  • 举报
回复
send(sockClient,sendXML,strlen(sendXML)+1,0);strlen(sendXML)后面干吗要加1?多发或是少发一个字节都是不对的。
zlx105 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hurryboylqs 的回复:]
改成HTTP1.0看看
temp.Format("CONNECT %s:%s HTTP/1.0\r\nUser-Agent: MyApp/0.1\r\n\r\n", myIp,myPort);
[/Quote]
改成“1.0”还是不对
不过我改了一小段代码,sendxml = temp + sendxml;去掉 send(sockClient,temp,strlen(temp)+1,0);//向代理服务器发送
虽然能得到正确的返回值,但是在返回值的最后还有
“HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Wed, 29 Sep 2010 06:59:29 GMT
Connection: close
Content-Length: 34

<h1>Bad Request (Invalid URL)</h1>

而且我还必须写两个recv()函数,要不然还是不能正确得到返回值,相应代码如下
if(::setsockopt(sockClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
MessageBox(NULL,"发送超时,请检查网络...","提示",MB_OK);
return ;
}else
{
send(sockClient,sendXML,strlen(sendXML)+1,0);//向服务器发送XML
}

if(::setsockopt(sockClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
MessageBox(NULL,"接收超时,请检查网络...","提示",MB_OK);
return ;
}else
{
recv(sockClient, recvBuf,RECV_MAX_BUFFER_LENGTH,0);//从服务器上接收XML
}

recv(sockClient, recvBuf,RECV_MAX_BUFFER_LENGTH,0);//从服务器上接收XML

如果将最后的recv()函数去掉只能得到“HTTP/1.0 200 Connection established。。。”
但是单步调试的时候却能得到正确的返回值。。。
我都搞糊涂了。。。呵呵
hurryboylqs 2010-09-29
  • 打赏
  • 举报
回复
改成HTTP1.0看看
temp.Format("CONNECT %s:%s HTTP/1.0\r\nUser-Agent: MyApp/0.1\r\n\r\n", myIp,myPort);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧