社区
C语言
帖子详情
C语言如何用socket发送http请求 得到数据包?
小魔菇
2009-07-15 09:22:08
C语言如何用socket发送http请求 得到数据包?
有源码例子最好了
...全文
2731
19
打赏
收藏
C语言如何用socket发送http请求 得到数据包?
C语言如何用socket发送http请求 得到数据包? 有源码例子最好了
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ctroll
2011-07-19
打赏
举报
回复
[Quote=引用 14 楼 eclipse_2 的回复:]
引用 12 楼 lemirymoo 的回复:
你可以把
GET / HTTP/1.1\r\n\r\n
发送给http://www.baidu.com/
会得到类似下面的东西,上面的是请求头,下面的是内容。Http响应数据包可能会分多次发回来,所以不要只看一个数据包。
HTTP/1.1 200 OK
Date: Wed, 15 Jul 2009 02:56:45 GMT
Ser……
[/Quote]
循环取。
char dest[1000];
nRet=1;
while(nRet>0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
if(nRet>0)
dest[nRet]=0;
else
dest[0]=0;
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s",dest);
}
renxiaowen
2010-07-15
打赏
举报
回复
楼主好。。我最近也在研究类似的问题,我想加你QQ好友请教你一下。。。麻烦你了
小魔菇
2009-11-26
打赏
举报
回复
加我Q
312134065
deping_lin
2009-11-26
打赏
举报
回复
楼主你好,我最近也在学socket发送http的请求。能不能把你的代码给我学习一下呢?
lemirymoo
2009-10-26
打赏
举报
回复
Content-Length 中的数字就是正文长度,从\r\n\r\n 后面开始量这么多个长度就是数据末尾了。
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 12 楼 lemirymoo 的回复:]
你可以把
GET / HTTP/1.1\r\n\r\n
发送给http://www.baidu.com/
会得到类似下面的东西,上面的是请求头,下面的是内容。Http响应数据包可能会分多次发回来,所以不要只看一个数据包。
HTTP/1.1 200 OK
Date: Wed, 15 Jul 2009 02:56:45 GMT
Server: BWS/1.0
Content-Length: 3397
Content-Type: text/html
Cache-Control: private
Expires: Wed, 15 Jul 2009 02:56:45 GMT
Set-Cookie: BAIDUID=976BA6BFA22EB89BB…
[/Quote]
如何判断从服务端的数据接收完成了呢?
小魔菇
2009-07-15
打赏
举报
回复
是我错了
程序有问题
已经找出来了
lemirymoo
2009-07-15
打赏
举报
回复
你可以把
GET / HTTP/1.1\r\n\r\n
发送给http://www.baidu.com/
会得到类似下面的东西,上面的是请求头,下面的是内容。Http响应数据包可能会分多次发回来,所以不要只看一个数据包。
HTTP/1.1 200 OK
Date: Wed, 15 Jul 2009 02:56:45 GMT
Server: BWS/1.0
Content-Length: 3397
Content-Type: text/html
Cache-Control: private
Expires: Wed, 15 Jul 2009 02:56:45 GMT
Set-Cookie: BAIDUID=976BA6BFA22EB89BB49FEC0552EE7636:FG=1; expires=Wed, 15-Jul-3
9 02:56:45 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
<html><head><meta http-equiv=Content-Type content="text/html;charset=gb2312"><ti
tle>百度一下,你就知道 </title><style>body{margin:4px 0}p{margin:0;padding:
0}img{border:0}td,p,#u{font-size:12px}#b,#u,#l td,a{font-family:arial}#kw{font:1
6px Verdana;height:1.78em;padding-top:2px}#b{height:30px;padding-top:4px}#b,#b a
{color:#77c}#u{padding-right:10px;line-height:19px;text-align:right;margin:0 0 3
px !important;margin:0 0 10px}#sb{height:2em;width:5.6em}#km{height:50px}#l{marg
in:0 0 5px 15px}#l td{padding-left:107px}p,table{width:650px;border:0}#l td,#sb,
#km{font-size:14px}#l a,#l b{margin-right:1.14em}a{color:#00c}a:active{color:#f6
0}#hp{position:absolute;margin-left:6px}#lg{margin:-26px 0 -44px}#lk{width:auto;
line-height:18px;vertical-align:top}form{position:relative;z-index:9}</style></h
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 9 楼 lemirymoo 的回复:]
才看明白你要的是客户端,
那你就发
GET [URL] HTTP/1.1\r\n\r\n
有这一行就足够了 。
[/Quote]
只能得到数据头
正文得不到
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 7 楼 lemirymoo 的回复:]
下面代码能够演示出大概意思。你用socket把buff送回客户端就成了。
char *head = "HTTP/1.1 200 OK\r\nContent-Length: %u\r\n\r\n%s";
char *p = " <html> <head> <title>标题 </title> </head> <body>正文 </body> </html>";
char buff[4096];
sprintf(buff,head,strlen(p),p);
[/Quote]
我是从一个客户端向一个网站发送http请求的
服务端我操作不了哈
lemirymoo
2009-07-15
打赏
举报
回复
才看明白你要的是客户端,
那你就发
GET [URL] HTTP/1.1\r\n\r\n
有这一行就足够了 。
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 6 楼 lemirymoo 的回复:]
找个rfc2616按那里面说的发消息就成了。
我用MinGW做过Http服务器,并且实现了C语言做动态网页,虽然很简陋,但毕竟是实现了。
做Http服务器端程序,只要有rfc2616就足够了。
其中请求头中最重要的是第一行 GET [URL] HTTP/1.1\r\n
响应头最重要的是响应代码和正文长度。
如果你只是很简单地做,那我推荐你这样写响应头
HTTP/1.1 200 OK\r\n
Content-Length:[正文长度]\r\n\r\n
[正文]
其中的正文长度就是…
[/Quote]
我是用一个抓包工具 按照上面的格式写的
可以得到数据 不过只能收到数据头部信息
其他的正文信息收不到
lemirymoo
2009-07-15
打赏
举报
回复
下面代码能够演示出大概意思。你用socket把buff送回客户端就成了。
char *head = "HTTP/1.1 200 OK\r\nContent-Length: %u\r\n\r\n%s";
char *p = "<html><head><title>标题</title></head><body>正文</body></html>";
char buff[4096];
sprintf(buff,head,strlen(p),p);
lemirymoo
2009-07-15
打赏
举报
回复
找个rfc2616按那里面说的发消息就成了。
我用MinGW做过Http服务器,并且实现了C语言做动态网页,虽然很简陋,但毕竟是实现了。
做Http服务器端程序,只要有rfc2616就足够了。
其中请求头中最重要的是第一行 GET [URL] HTTP/1.1\r\n
响应头最重要的是响应代码和正文长度。
如果你只是很简单地做,那我推荐你这样写响应头
HTTP/1.1 200 OK\r\n
Content-Length:[正文长度]\r\n\r\n
[正文]
其中的正文长度就是从[正文]部分的长度,其中不包括请求头。
HTTP协议规定,请求头中的换行符是\r\n而不是\n这一点要注意。
一般来说这样写的请求头就能够正常浏览了。
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 4 楼 NKLoveRene 的回复:]
找个抓包工具抓一下数据包
看http头是怎么组成的
然后照着自己写个字符串,用socket发出去,然后再收一下,就得到数据包了
[/Quote]
为什么我只能得到数据包的头部
其他的数据得不到?
NKLoveRene
2009-07-15
打赏
举报
回复
找个抓包工具抓一下数据包
看http头是怎么组成的
然后照着自己写个字符串,用socket发出去,然后再收一下,就得到数据包了
icefairy
2009-07-15
打赏
举报
回复
mark
Nio96
2009-07-15
打赏
举报
回复
有人讲过。。。
http://blog.csdn.net/wbczyh/archive/2008/02/24/2117094.aspx
SIJIMO
2009-07-15
打赏
举报
回复
http://topic.csdn.net/u/20090217/15/4a5878d8-5019-4be0-b5c2-b6977a38dcd7.html
C语言
基于
socket
多人聊天
- **监听
socket
**:服务器首先创建一个
socket
,然后调用bind函数绑定一个IP地址和端口号,最后用listen函数开启监听,等待客户端的连接请求。 - **接受连接**:当有客户端连接请求时,服务器调用accept函数,为每...
C语言
Socket
简单编程指南
C语言
Socket
编程是网络编程中的一项重要技术,它允许程序之间通过网络进行通信。
Socket
编程通常涉及到了解套接字(
Socket
)的基本概念、网络理论、各种网络编程函数以及如何处理IP地址等问题。以下是从提供的文件...
c语言
Socket
编程
- **数据报式
Socket
(SOCK_DGRAM)**:不保证
数据包
的顺序或可靠性,每个
数据包
独立
发送
,基于UDP协议,适合对实时性要求高的应用。 3. **
Socket
配置**: - **面向连接的
Socket
**:客户端通过`connect()`函数将...
【精品】:
c语言
socket
实现主机与客户端异步通信.doc
在本文档中,我们讨论了如何使用
C语言
通过
socket
实现主机与客户端之间的异步通信。
Socket
编程是网络编程的基础,它允许程序通过网络交换数据。以下是对关键知识点的详细说明: 1. **
Socket
**:
Socket
是进程间通信的...
c语言
实现
socket
.docx
- **数据报套接字(UDP)**:这种类型的
Socket
使用UDP协议,它是一种无连接的服务,不保证
数据包
的顺序到达和可靠性。UDP套接字适用于实时性要求较高但可靠性要求较低的应用场合,如视频会议和在线游戏。 这两种...
C语言
70,024
社区成员
243,253
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章