加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

WinSock编程HTTP客户端小结

(2010-11-22 14:01:50)
标签:

winsock

http

客户端

套接字

it

分类: 编程经验--积跬步至千里

注:///后的句子表示整个WinSock过程的步骤。//后是对C语句的注释。可以先看///之后了解大意。有问题也可以发纸条,或者留言,一起探讨。

///参见MSDN2010,搜索“Get Started with winsock”,将得到整个winsock编程的一个overview。

想要了解一个全新领域的编程,在MSDN里直接搜索get started with+感兴趣的内容。
http://www.randomwire.com/audio/doraemon_theme2.mp3
#include<WinSock2.h>
#include<Windows.h>

#pragma comment(lib,”WS2_32.lib”)

///启动WinSock编程。详细内容见MSDN2010“WSAStartup”
WSADATA wsaData;//此结构体用于存储Windows Sockets实现细节
WORD sockVersion=MAKEWORD(2,0);//设定用户端支持的winsock版本(最低和最高)
WSAStartup(sockVersion, &wsaData);//应用程序从中提取上述实现细节;
//只有成功调用后,才能使用其他WinSock函数
///创建套接字
SOCKET s_example=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//想要了解socket怎么搜索?直接在MSDN里搜索“socket”不好找。
//那么在VS2010里(其他版本也可以)选中socket,右键单击go to definition
//发现它在winsock2.h中。用“socket winsock2.h”联合查询,第一条就是要找的。
//创建套接字失败,要调用WSACleanup()清空。

///连接服务器
sockaddr_in servAddr;
servAddr.sin_family=AF_INET;//设置地址家族,winsock只支持AF_INET。
servAddr.sin_port=htons(your_port);//将主机上的u_short端口号转换成TCP/IP网络字节顺序(规定为大端,即big-endian形式)
///计算数字串IP。如果用户输入的IP是字母串,比如www.baidu.com,要通过底层访问DNS得到服务器地址表。如果输入10.123.123.123,可以直接设定IP。
  hostent* HostEnt=gethostbyname(you_enter_hostname)//此结构体是Winsock DLL自动调用,只能定义一个这样的结构。详见MSDN2010,”hostent structure“
in_addr** Addr=(in_addr**)HostEnt->h_addr_list;//注意是指针的指针
char* IPAddr=inet_ntoa(**Addr);//和上一句一起,转换成10.123.123.123的格式
servAddr.sin_addr.S_un.S_addr=inet_addr(IPAddr);//转换成一个32位无符号整数
connect(s,(sockaddr*)&servAddr,sizeof(servAddr));//注意容错,失败后要调用WSACleanup();
///构造http请求
///首先必须了解http数据报请求格式和响应格式,此处略。
///假设请求存于sendBuff[]中,响应文件存于resvBuff[]中。
send(s,sendBuff,bfsize,0);
recv(s,resvBuff,bfsize,0);//要保证接受文件的完整性。要对接收的文件头作出相应的分析。状态码1**表示正在处理消息,2**表示成功,3**表示重定向,4**表示客户端错误,5**表示服务器端错误。

closesocket(s);//关闭套接字

WSACleanup();//释放WS2_32库。

PS:sockaddr是所有socket支持协议的通用形式,其中包含sockaddr_in,它对应的是TCP/IP协议。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有