#include<winsock2.h>
#include<stdio.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
void initializtion(){
WSADATA w;
WSAStartup(MAKEWORD(2,2),&w);
}
SOCKET connectSock(const char *hostname,const char *service,const char *transport){
HOSTENT *phe; //host information entry
SERVENT *pse; //service information entry
PROTOENT getservbyname("http","tcp")*ppe; //protocol information entry
SOCKET sock;
SOCKADDR_IN sockaddr_in;
int type; //service type udp and tcp
sockaddr_in.sin_family=AF_INET;
memcmp(&sockaddr_in,0,sizeof(sockaddr_in));
//通過服務名稱獲得端口號....類似http對應80端口 。。。但這里和我想象的一樣
if(pse=getservbyname("http","tcp")){
sockaddr_in.sin_port=pse->s_port;
printf("端口:%u\n",pse->s_port);
}
else if((sockaddr_in.sin_port=htons((u_short)atoi(service)))==0){
printf("can not get port!\n");
exit(1);
}
if(phe=gethostbyname(hostname)){
memcpy(&sockaddr_in.sin_addr,phe->h_addr,phe->h_length);
printf("IP:%s\n",inet_ntoa(sockaddr_in.sin_addr));
}
else if((sockaddr_in.sin_addr.s_addr=inet_addr(hostname))==INADDR_NONE){
printf("can not get hostaddr!\n");
exit(1);
}
if((ppe=getprotobyname(transport))==0){
exit(1);
}
if(strcmp(transport,"udp")==0)
type=SOCK_DGRAM;
else{
type=SOCK_STREAM;
}
if((sock=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP))<0)
{
exit(1);
}
sockaddr_in.sin_port = htons(80);
int a=connect(sock,(SOCKADDR*)&sockaddr_in,sizeof(SOCKADDR));
printf("%d\n",a);
return sock;
}
int main()
{
initializtion();
SOCKET s;
char *request=
"GET / HTTP/1.1\r\n"
"Host: %s\r\n"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n"
"Accept-Encoding: gzip, deflate, sdch, br\r\n"
"Accept-Language: zh-CN,zh; q=0.8\r\n"
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\r\n";
char *hostname="www.hao123.com";
char sendString[2048];
s=connectSock(hostname,"HTTP","TCP");
int ret=sprintf(sendString,request,hostname);
char buffer[1024] = {0}; //文件緩沖區
int nCount;
if(send(s,sendString,ret,0)!=ret){
printf("send error!\n");
exit(1);
}
if((nCount=recv(s,buffer,1024,0)) < 0)
printf("recv error!\n");
printf("recv:%d\n%s\n",nCount,buffer);
closesocket(s);
WSACleanup();
system("pause");
return 0;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。