[image]35 求陈gx 08年400多张的照片!

照门_长尾关键词挖掘
关键词挖掘
54 / 11389
894 / 8690
655 / 1586
后可查看更多页
关闭关闭关闭& & & & & &关于c/c++&网络编程,无论在linux还是windows,要说到自由性,和安全性,socket无疑是比较好的!对于socket,因为它的传输协议只有两种tcp和udp,属于网络层,这里我们不去重点讨论。
  & & &关于应用层协议http,如何用C/C++的socket来实现数据传输和下载呢?
& &1. http是超文本协议,用在html文件中,那么对于html是如何传输数据呢? &&
   &通过post或者get传输表单数据,当然http还有其他的方式head,put ,delete,option,trace等方式。head和get差不多,唯一的区别就是head只返回协议头,put和post也很相似,但是可惜html表单数据不支持这一特性,put和post的区别在于,put说出来资源放置于服务器的位置,而post没有,post将这项权利给予服务器来使用。delete顾名思义,就是指定删除在服务器上的资源,option一般用来获取当前URl所支持请求的方法(就是上诉的六种)。
& & & &对于c/c++传输单数据,get方法:
& & & & &get方法, &形如:&http://i.cnblogs.com/EditPosts.aspx?opt=1&
&这个表单传输的数据就是1,其中键值就是opt,这个需要和服务器上的保持一致
& & & 对于一个简单的html
2 &head&&title&右边&/tile&&/head&
type="text", name="opt" & 1 &/input&
& opt就是键值
& 那么用socket如何实现:&
& & 首先,windows下,我们
& &1. 先要启动异步套接字启动命令
//初始化套结字动态库
2 if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) //异步套接字启动命令
/版本(次,主)
//返回socket实现细节信息
system("WSAStartup failed!\n");
system("pause");
return -1;
2.在想linux下一样,创建套接字
sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
3.绑定端口号,和设置要访问的服务器主机地址
//设置服务器地址
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr("203.195.192.24");
servAddr.sin_port = htons((short)80);
4.连接服务器
&1 retVal = connect(sHost, (LPSOCKADDR)&servAddr, sizeof(servAddr));&
5.然后接收信息字段
char *pHttpGet = "GET %s?%s HTTP/1.1\r\n"
"Host: %s:%d\r\n\r\n";
char strHttpGet[1024] = { 0 };
//ZeroMemory(strHttpGet, BUF_SZIE);
//初始化内存
char msg[]="username=Gjxun&pwd=sssssss";
sprintf(strHttpGet, pHttpGet, addr, msg, host, port);
int var = send(sHost, strHttpGet, strlen(strHttpGet), 0);
recv(sHost,rebuf ,sizeof(rebuf),0);
最后关闭的时候。需要用这个来关闭异步套接字
1 WSACleanup( );
这是http的基本流程,对于get发送单个或者多个表单数据如上面所示
对于post而言,情况 会多些,也会复杂些
& &1.如果发送的是单个或者多个字段信息,那么我们的处理方式大致可以有下面这两种
& &第一种: 就像get一样,只不过单纯的将数据放置于协议的后面,需要注意点的是,格式比较重要,特别协议头和正文部分之间需要各一个空行:
& & 下面的msg亦可以和get一样写成 msg="username=Gxjun&pwd=ssssss"; 还有content-Length的长度: 是正文和正文数据以及尾部长度之后不需要算协议头长度,不然会,当将连接改为Connection: Keep-Alive&出现服务器长时间接受现象。---指导服务器接受到结尾帧或者数据长度达到那个长度为止,才会响应刚才的动作!!!!
1 void sendPost1(char* addr, char * host, char *msg, int port) {
char *pHttpPost = "POST %s HTTP/1.1\r\n"
"Host: %s:%d\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: %d\r\n\r\n"
char strHttpPost[1024] = { 0 };
//ZeroMemory(strHttpGet, BUF_SZIE);
//初始化内存
sprintf(strHttpPost, pHttpPost, addr, host, port, strlen(msg), msg);
int var = send(sHost, strHttpPost, strlen(strHttpPost), 0);
if (var & 0) {
MessageBoxA(NULL, "请求发送失败!", 0, 0);
另一种方式:多种数据表单的形式:协议头部分,将Content-Type: multipart/form- 同时还需要加上一个分割标识,即boundary = Gxjunnndgx ,
& & 整体上就是设置为&Content-Type:&multipart/form-&boundary=71b23e4066ed\r\n"; &
& &其他部分参开rfc2038部分。
& 所以对于单个或者多个字段表单而言:
比如: 需要像如下的html文件一样将username和pwd的键值数据发送给服务器数据数据:
&head&&/head&
&form action="xxx.xxx.xxxx"
method="post"&
&input type="text" name="username"&Gxjun&/input&
&input type="password" name="pwd"&ssssss&/input&
1 void sendPost(char* addr, char * host,string username,string psw, int port){
std::string header("");
std::string u_content("");
std::string p_content("");
//----------------------post头开始--------------------------------
header += "POST ";
header += " HTTP/1.1\r\n";
header += "Host: ";
header += "\r\n";
header += "Connection: Keep-Alive\r\n";
header += "Accept: */*\r\n";
header += "Pragma: no-cache\r\n";
header += "Content-Type: multipart/form- boundary=71gxjun\r\n";
//用户名数据表单
u_content += "--71gxjun\r\n";
u_content += "Content-Disposition: form- name=\"u\"\r\n\r\n";
u_content += username+"\r\n";
//密码数据表单
p_content += "--71gxjun\r\n";
p_content += "Content-Disposition: form- name=\"p\"\r\n\r\n";
p_content += psw+"\r\n";
//post尾时间戳
std::string strContent("--71gxjun--\r\n\r\n");
char temp[64] = { 0 };
//注意下面这个参数Content-Length,这个参数值是:http请求头长度+请求尾长度+文件总长度
// 就分块传送
sprintf(temp, "Content-Length: %d\r\n\r\n",
p_content.length()+u_content.length() + strContent.length());
std::string str_http_
str_http_request.append(header);
//----------------------post头结束-----------------------------------
//发送post头
send(sHost, str_http_request.c_str(), str_http_request.length(), 0);
Sleep(0.2);
send(sHost, p_content.c_str(), p_content.length(), 0);
Sleep(0.2);
send(sHost, u_content.c_str(), u_content.length(), 0);
Sleep(0.2);
::send(sHost, strContent.c_str(), strContent.length(), 0);
Sleep(0.2);
&对于boundary=abcdegxjun &这部分的数据可以随意定义,但不要太简单,不然可能会和数据混淆,上面是两个字段的发送,所以需要两部分的正文加正文数据,对于尾部的结束标识,前面需要&--&两个横短线后面也需要两个横短线&--&,对于中间的分割标志,只需要前面有&--&就可以了! &还需要注意的是数据发送完之后,需要换行,然后再接上分割标识。
4.然后对于文件和照片的传输 & &---在linux下,一切接文件,在window下我们也可以将照片看做二进制文件处理
& 其实文件的传输,都可以作为二进制文件来传输,我们可以将文件
char * ReadFile(char *pathpic, int &pic_len){
//将图片读取出来
FILE *fp = fopen(pathpic, "rb");
//打开文件
MessageBoxA(NULL, "没有找到文件位置", 0, 0);
return NULL;
fseek(fp, 0, SEEK_END);
//一直寻找到文件尾部
pic_len = ftell(fp);
//得到图片的长度
rewind(fp);
//rewind将文件指针指向开头
char *pic_buf = new char[pic_len + 1];
//开辟一个空间在堆上
memset(pic_buf, 0, pic_len + 1);
//清空文件指针
//读取文件内容
fread(pic_buf,sizeof(char),pic_len,fp);
//测试将文件再保存于D:中
MessageBoxA(NULL, "文件开始", 0, 0);
FILE *fpw = fopen("C:\\AA.jpg","wb");
fwrite(pic_buf,sizeof(char), pic_len, fpw);
fclose(fpw); //关闭文件流
MessageBoxA(NULL, "文件结束", 0, 0);
fclose(fp);
return pic_
对于不同的类型,需要修改不同的Content-Type 比如图片jpg,jpeg等就是需要这种 ,"Content-Type: image/jpeg,对于其他的的类型,不妨去这儿找找,比较详细
然后下面是一个关于多个字段和多个照片,运用一个form表单,通过一次post,将数据上传到服务器上! &注: 这里是在c\s模式, 客户端是c++ ,服务器是php
& 代码如下:
1 char * ReadFile(char *pathpic, int &pic_len){
//将图片读取出来
FILE *fp = fopen(pathpic, "rb");
//打开文件
MessageBoxA(NULL, "没有找到文件位置", 0, 0);
return NULL;
fseek(fp, 0, SEEK_END);
//一直寻找到文件尾部
pic_len = ftell(fp);
//得到图片的长度
rewind(fp);
//rewind将文件指针指向开头
char *pic_buf = new char[pic_len + 1];
//开辟一个空间在堆上
memset(pic_buf, 0, pic_len + 1);
//清空文件指针
//读取文件内容
fread(pic_buf,sizeof(char),pic_len,fp);
//测试将文件再保存于D:中
MessageBoxA(NULL, "文件开始", 0, 0);
FILE *fpw = fopen("C:\\AA.jpg","wb");
fwrite(pic_buf,sizeof(char), pic_len, fpw);
fclose(fpw); //关闭文件流
MessageBoxA(NULL, "文件结束", 0, 0);
fclose(fp);
return pic_
void sendPic(char* addr, char * host, char *pathpic, char* picname, int port, string username, string psw) {
//先读取文件流
//实名图片读取,等级图片读取
int Spic_len, Dpic_
char *Spic_data=NULL, *Dpic_data=NULL;
Spic_data=ReadFile(pathpic, Spic_len);
Dpic_data = ReadFile(picname, Dpic_len);
std::string header("");
std::string content("");
//实名文件
std::string nex_content("");
//等级文件
std::string u_content("");
std::string p_content("");
//----------------------post头开始--------------------------------
header += "POST ";
header += " HTTP/1.1\r\n";
header += "Host: ";
header += "\r\n";
header += "Connection: Keep-Alive\r\n";
header += "Accept: */*\r\n";
header += "Pragma: no-cache\r\n";
header += "Content-Type: multipart/form-boundary=71b23e4066ed\r\n";
//用户名数据表单
u_content += "--71b23e4066ed\r\n";
u_content += "Content-Disposition: form- name=\"u\"\r\n\r\n";
u_content += username+"\r\n";
//密码数据表单
p_content += "--71b23e4066ed\r\n";
p_content += "Content-Disposition: form- name=\"p\"\r\n\r\n";
p_content += psw+"\r\n";
//发送文件数据
content += "--71b23e4066ed\r\n";
content += "Content-Disposition: form- name=\"picurl\"; filename=\"";
content +=
content += "\"\r\n";
content += "Content-Type: image/jpeg \r\n\r\n";
//发送文件数据
nex_content += "\r\n--71b23e4066ed\r\n";
nex_content += "Content-Disposition: form- name=\"id_account\"; filename=\"";
nex_content +=
nex_content += "\"\r\n";
nex_content += "Content-Type: image/jpeg\r\n\r\n";
//post尾时间戳
std::string strContent("\r\n--71b23e4066ed--\r\n");
char temp[64] = { 0 };
//注意下面这个参数Content-Length,这个参数值是:http请求头长度+请求尾长度+文件总长度
// 就分块传送
sprintf(temp, "Content-Length: %d\r\n\r\n",
content.length() + nex_content.length() +p_content.length()+u_content.length() + Spic_len + Dpic_len + strContent.length());
std::string str_http_
str_http_request.append(header);
//----------------------post头结束-----------------------------------
//发送post头
send(sHost, str_http_request.c_str(), str_http_request.length(), 0);
char fBuff[1024];
int buffsize = 1024; // 每个数据包存放文件的buffer大小
int nS//记录post初始位置
int nS//记录剩余文件大小
Sleep(0.2);
//发送用户名表单
send(sHost, u_content.c_str(), u_content.length(), 0);
Sleep(0.2);
//发送密码表单
send(sHost, p_content.c_str(), p_content.length(), 0);
Sleep(0.2);
//发送尾部
//发送格式
send(sHost, content.c_str(), content.length(), 0);
Sleep(0.2);
send(sHost, Spic_data, Spic_len, 0);
Sleep(0.2);
//发送等级图片数据
send(sHost, nex_content.c_str(), nex_content.length(), 0);
Sleep(0.2);
send(sHost, Dpic_data, Dpic_len, 0);
Sleep(0.2);
//如果数据是在够大,需要作调整,可以使用如下的方式,切割文件发送数据
for (int i = 0; i & Spic_ i += bufsize)
if (i + bufsize + 1& Spic_len){
nSize = Spic_len -
memcpy(fBuff, Spic_data + nStart, nSize);
::send(sHost, fBuff, nSize, 0);
Sleep(0.2);
//防止毡包
//发送等级图片数据
::send(sHost, nex_content.c_str(), nex_content.length(), 0);
Sleep(0.2);
bufsize = 4096;
for (int i = 0; i & Dpic_ i += bufsize)
if (i + bufsize + 1& Dpic_len){
nSize = Dpic_len -
memcpy(fBuff, Dpic_data + nStart, nSize);
::send(sHost, fBuff, nSize, 0);
Sleep(0.2);
//防止毡包
for (int i = 0; i & Dpic_ i += nPacketBufferSize)
if (i + nPacketBufferSize + 1& Dpic_len){
nSize = Dpic_len -
nSize = nPacketBufferS
memcpy(fBuff, Dpic_data + nStart, nSize);
::send(sHost, fBuff, nSize, 0);
Sleep(0.2);
//防止毡包
send(sHost, strContent.c_str(), strContent.length(), 0);
Sleep(0.2);
if (Spic_data == NULL)
MessageBox(NULL, L"文件数据为空", 0, 0);
//释放内存
delete Spic_
delete Dpic_
& & &当这些基本做好了之后,就需要看返回的结果:
& & & &对于返回http返回结果协议头的简单解析: 如果需要深入研究去看 rfc2616,这里就简单的罗列一些100-500的简单的含义吧
& & & 100-199 用于指定客户端应相应的某些动作。&  200-299 用于表示请求成功。&& & & 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。&& & & 400-499 用于指出客户端的错误。&& & & 500-599 用于支持服务器错误。&&
详细的文档,可以看看这个在线文档,&&
学习的过程中参考过几位博主,此处表达谢意,终于对http在以前认知的基础上,再次的又重新的知识了一番!! 记录些这些,希望对以后学习的人,能够提供一点点帮助!!!
阅读(...) 评论()有人能给我发一个张BZ陈GX的照片全集么?【李毅吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:30,713,992贴子:
有人能给我发一个张BZ陈GX的照片全集么?
邮箱@ q q . co m ,谢谢好心人
没光的时候连影子都会离开你~
这电信越来越坑啊,网速慢啊,回个贴半天回不上
Lz自己一个人照顾好自己,晚上盖好被子,早晨醒来不要猛的坐起来会头疼,不要吃凉的辣的对胃不好,过马路的时候左右看,好好吃饭,不要就穿那么点衣服,感冒了一定要吃药,不要熬太晚,睡觉时记得把手机的亮度调低些,不然有辐射,记得我在关心你。可以粉我吗? 么么哒!
贴吧热议榜
使用签名档&&
保存至快速回贴求陈老师方面的照片。。_百度知道
求陈老师方面的照片。。
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
时过境迁了 还找那些东西
陈@冠xi老师
为您推荐:
其他类似问题
照片的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。拒绝访问 | lt.cjdby.net | 百度云加速
请打开cookies.
此网站 (lt.cjdby.net) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(43df8ef-ua98).
重新安装浏览器,或使用别的浏览器

我要回帖

更多关于 已知fx的定义域求fgx的定义域 的文章

 

随机推荐