请教关于http通信的问题`~`~

gggkso 2006-05-08 04:17:21
小弟我初学socket编程..写了一个用于http通讯的程序,但每次发送一次请求之后就不能再发第二次,即只有建立链接第一次发送和接收成功,不知是什么原因.请问如何能连续发送请求?
...全文
356 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengwh 2006-07-15
  • 打赏
  • 举报
回复
不过我也看到有的浏览器能够一个socket多次进行HTTP请求,不知道采用何技术.
skyMountain 2006-05-22
  • 打赏
  • 举报
回复
“在同一个socket中连续多次发送和接收网页数据”

http协议设计的基本原则是:一次连接只做一件事情。
看似麻烦,实际上这个原则让服务器涉及简化了不知多少倍。
gggkso 2006-05-22
  • 打赏
  • 举报
回复
多谢mLee79,确实是百度的问题,另外我的代码也有些问题
while((byte_recv=recv(sockfd,txtread,1000,0))!=0)
printf("Recv:%d\n%s\n",byte_recv,txtread);
用这种方法接收数据常产生混乱,我改成加大txtread的大小一次读完了,应该还有更好的办法..

非常感谢各位的回答!!!
mLee79 2006-05-22
  • 打赏
  • 举报
回复
你的代码木有问题, 有问题的是 baidu , 它不支持保持连接哪有什么办法 ...
gggkso 2006-05-18
  • 打赏
  • 举报
回复
可能我说的不明白,我的意思是在同一个socket中连续多次发送和接收网页数据
RuoMu 2006-05-18
  • 打赏
  • 举报
回复
要想不断开连接就新建一个SOCKET
gggkso 2006-05-12
  • 打赏
  • 举报
回复
谢谢......有没有更好的办法(不close)?
我看ie访问站点的时候好像是不断开连接的
cangwu_lee 2006-05-12
  • 打赏
  • 举报
回复
先Close,在发送第二次。
gggkso 2006-05-11
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

char txtsend[1000]="GET / HTTP/1.1\nHost: www.baidu.com\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\nAccept-Language: zh-cn,zh;q=0.5\nAccept-Encoding: gzip,deflate\nAccept-Charset: gb2312,utf-8;q=0.7,*;q=0.7\nKeep-Alive: 300\nConnection: keep-alive\n\n";
char txtread[1000]="";

int main(int argc,char *argv[])
{
BOOL bNoDelay = TRUE;
WSADATA ws;
SOCKET sockfd;
struct sockaddr_in client_addr;
struct hostent *host;
intbyte_recv;

WSAStartup(MAKEWORD(2,2),&ws);
if ((sockfd = socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET)
{
printf("Create Socket Error\n");
return -1;
}
if(setsockopt(sockfd,IPPROTO_TCP,TCP_NODELAY,(char*)&bNoDelay,sizeof(bNoDelay))==SOCKET_ERROR)
{
printf("Erro Set");
}
host=gethostbyname(argv[1]);

client_addr.sin_family=AF_INET;
client_addr.sin_port=htons(80);
client_addr.sin_addr=*((struct in_addr *)host->h_addr);

if (connect(sockfd,(struct sockaddr *)(&client_addr),sizeof(client_addr))==SOCKET_ERROR)
{
printf("Connect Error\n");
return -1;
}
send(sockfd,txtsend,sizeof(txtsend),0);
while((byte_recv=recv(sockfd,txtread,1000,0))!=0)
printf("Recv:%d\n%s\n",byte_recv,txtread);
system("pause");
send(sockfd,txtsend,sizeof(txtsend),0);
while((byte_recv=recv(sockfd,txtread,1000,0))!=0)
printf("Recv:%d\n%s\n",byte_recv,txtread);
system("pause");

closesocket(sockfd);
WSACleanup();
system("pause");
return 0;
}

这是源代码,只有第一次Recv有内容...

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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