喜气羊羊

羊羊其实是条鱼|每天学习一点点|每天进步一点点

  PHP博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  68 随笔 :: 0 文章 :: 63 评论 :: 0 Trackbacks
刚刚开始学习Socket,C++也忘记的差不多了


// vctest.cpp : 定义控制台应用程序的入口点。
//

#include 
"stdafx.h"

#include 
<iostream>
#include 
<stdio.h>
#include 
<winsock2.h>
#pragma comment(lib, 
"WS2_32")

using namespace std;

int main()
{

    
int err;
    WSADATA wsaData;
    err 
= WSAStartup(MAKEWORD(2,2), & wsaData);
    
if(err != 0)
    {
        cout 
<< "Can't load Socket" << endl;
        
return 0;
    }
    
    
if(LOBYTE(wsaData.wVersion) != 2)
    {
        cout 
<< "Can't find Socket 2" << endl;
        WSACleanup();
        
return 0;
    }

    
struct protoent *ppe;
    ppe 
= getprotobyname("tcp");

    SOCKET s;

    s 
= socket(PF_INET, SOCK_STREAM, ppe->p_proto);
    
if(s == INVALID_SOCKET)
    {

        cout 
<< "Socket Init Faild!" << endl;
        WSACleanup();
        
return 0;
    }

    

    hostent 
*m_phostent;
    m_phostent 
= gethostbyname("localhost");
    

    
int m_port;
    m_port 
= 80;
    m_port 
= 443;

    

    
if(m_phostent == NULL)
    {
        cout 
<< "DNS ERROR" << endl;
        WSACleanup();
        
return 0;
    }
    
    
struct in_addr ip_addr;
    memcpy(
&ip_addr, m_phostent->h_addr_list[0], 4);
    
    
struct sockaddr_in destaddr;
    memset((
void *)&destaddr, 0sizeof(destaddr));
    destaddr.sin_family 
= AF_INET;
    destaddr.sin_port 
= htons(m_port);
    destaddr.sin_addr 
= ip_addr;

    
char m_ipaddr[256];
    sprintf_s(m_ipaddr, 
"%d.%d.%d.%d",
        destaddr.sin_addr.S_un.S_un_b.s_b1,
        destaddr.sin_addr.S_un.S_un_b.s_b2,
        destaddr.sin_addr.S_un.S_un_b.s_b3,
        destaddr.sin_addr.S_un.S_un_b.s_b4);
    cout 
<< m_ipaddr << endl;

    
if(connect(s, (struct sockaddr*)&destaddr, sizeof(destaddr)) !=0)
    {
        cout 
<< "connect to %s faild" << endl;

        WSACleanup();
        
return 0;
    }

    
char m_r[1024]; //request header


    
char szPort[10];
    
char szTemp[20];

    sprintf_s(szPort, 
"%d", m_port);
    memset(m_r, 
'\0'1024);

    
////line 1
    strcat_s(m_r, "GET ");
    strcat_s(m_r, 
"/");
    strcat_s(m_r, 
" HTTP/1.1");
    strcat_s(m_r, 
"\r\n");

    
///line2
    strcat_s(m_r, "HOST:");
    strcat_s(m_r, 
"localhost");
    

    
///line4
    strcat_s(m_r, "Accept:*/*");
    strcat_s(m_r, 
"\r\n");

    
///line5
    strcat_s(m_r,"User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)");
    strcat_s(m_r,
"\r\n");

    
///第6行:连接设置,保持
    strcat_s(m_r,"Connection:Keep-Alive");
    strcat_s(m_r,
"\r\n");

    
///last line
    strcat_s(m_r, "\r\n");

    cout 
<< m_r << endl;

    
int length = strlen(m_r);

    
if(send(s, m_r, length, 0== SOCKET_ERROR)
    {
        cout 
<< "send request faild" << endl;
        WSACleanup();
        
return 0;
    }

    
//get resopnse header 
    char mr[1024];
    
char c = 0;
    BOOL endr 
= FALSE;
    
int nIndex = 0;
    
while(!endr && nIndex < 1024)
    {
        recv(s, 
&c, 10);
        mr[nIndex
++= c;
        
if(nIndex >= 4)
        {
            
if(mr[nIndex - 4== '\r' && mr[nIndex - 3== '\n' && mr[nIndex - 2== '\r' && mr[nIndex -1== '\n')
            {
                endr 
= TRUE;
            }
        }
    }

    cout 
<< mr << endl;

    
string strmr;
    strmr.append(mr);

    
//get resoponse
    int m_nrsize; //resoponse header size

    

    
int nls = 0//line size
    char Line[256];
    
//while(nls != -1)
    
//{
        

//    }
    

    cout 
<< "OK" << endl;

    WSACleanup();

    getchar();
    
return 0;
}


链接http网站成功
返回状态http 200 ok

研究https的链接。

posted on 2009-08-18 14:12 young40 阅读(874) 评论(0)  编辑 收藏 引用 网摘

只有注册用户登录后才能发表评论。
网站导航: