是recv的问题吗?哪里错了?

BAO BAO 2017-12-21 02:04:49
#include <windows.h>
#include <stdio.h>
int main()
{
char senData[1024],revData[1024]={0};
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 2);
if(WSAStartup(sockVersion, &wsaData) != 0) return 0;
SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(9092);
servAddr.sin_addr.S_un.S_addr =inet_addr("118.85.207.85");
connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr));
for(int page=1;page<301;page++)
{
sprintf(senData,"POST /wapclient/aliFishCard.do HTTP/1.1\r\n"
"Host: cservice.client.189.cn:9092\r\n"
"Connection: keep-alive\r\n"
"Content-Length: 293\r\n"
"Cookie: svid=F8E88B2ACFAF98A9; lvid=e504c5b859fcf73f19761d310e0d130d; nvid=1; JSESSIONID=574431F783D44B688579002EFE8F5404; s_cc=true; s_fid=2D23A3AB05C71EA3-1CBFB81FBA60B731\r\n\r\n"
"{\"headerInfo\": { \"functionCode\": \"queryKingCardNumber\"},\"requestContent\":{\"shop\":\"\",\"sessionid\":\"22455187cd7d423c8334ba0de4f9ce11\",\"salesprodid\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"contnumber\":\"\",\"pageindex\":%d,\"pagesize\":10,\"provincecode\":\"609904\",\"areacode\":\"8411700\",\"islast\":\"1\"}}\r\n\r\n",page);

send(sClient,senData,strlen(senData),0);
while(recv(sClient,revData,1023,0)>0)
{
printf("%s\n",revData);
memset(revData,0,1024);
}
Sleep(200);
}
closesocket(sClient);
WSACleanup();
return 0;
}


第一次循环正常 后面的就接收不到了 ,是什么原因啊?
...全文
722 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2018-01-23
  • 打赏
  • 举报
回复
检查一下send/recv的返回值,看看WSAGetLastError() 错误是什么?
待续_1006 2018-01-23
  • 打赏
  • 举报
回复
引用 8 楼 wqte45 的回复:
[quote=引用 7 楼 worldy的回复:]recv 本身是阻塞的,不需要while(循环
不用循环 一次接收不完啊[/quote] 把需要发送的数据一次性打包发走,可以都存在数组中
BAO BAO 2017-12-24
  • 打赏
  • 举报
回复
引用 7 楼 worldy的回复:
recv 本身是阻塞的,不需要while(循环
不用循环 一次接收不完啊
worldy 2017-12-24
  • 打赏
  • 举报
回复
recv 本身是阻塞的,不需要while(循环
赵4老师 2017-12-23
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
zgl7903 2017-12-22
  • 打赏
  • 举报
回复
send recv 的 返回值应该做区分处理 HTTP的话 使用 CHttpFile 可能会比较简单
cutmelon 2017-12-22
  • 打赏
  • 举报
回复
阻塞是应该的,你就这么定义的socket。要解决这个问题,必须做http协议处理,就是你接收到数据后,要解析内容,看看服务器会给你返回多少数据,收完了就别接了,进入下一次发送。光是打印到屏幕是不行的
BAO BAO 2017-12-22
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903的回复:
send recv 的 返回值应该做区分处理 HTTP的话 使用 CHttpFile 可能会比较简单
只想用api写,问题找到了 但是不知道怎么解决, recv在循环里会阻塞
oyljerry 2017-12-21
  • 打赏
  • 举报
回复
你看看是不是连接已经断开了。服务端有数据返回吗
red-fly 2017-12-21
  • 打赏
  • 举报
回复
http连接应该是单次的,即完成一次任务之后连接断开,需要时再连接。 楼主的是一个连接多次任务,一个循环就是一个任务,所以除了第一次之外,服务器都不再响应。 以上为我的理解,可能不完全正确,但至少可以参考

18,356

社区成员

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

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