简单网络编程-TCP客户端示例

http://blog.csdn.net/is2120/archive/2011/05/22/6438034.aspx

本示例展示了如何生成一个client socket,连接到一个 http server,并从 http server 上下载一个文件。

simple http client

 

一个简单的TCP CLIENT 程序流程:
    1.
初始化 winsock library
    2.
创建一个 IPPROTO_TCP_SOCKET 套接字。( 使用socket)
    3.
通过 gethostbyname() gethostbyaddr() 获取主机信息
    4.
使用我们创建的socket 通过connect() 连接到服务器
    5.
通过send()recv() 收发数据直到tcp chat 结束
    6.
使用closesocket() 关闭连接。
    7.
释放资源:winsock library( 使用 WSACleanup())

#include  <cstdio>
#include  <afx.h>
#include  <winsock2.h>

//z 2011-05-22 16:39:41@is2120

#pragma comment(lib, "ws2_32" )
#pragma comment(lib, "MSVCRT" )

int  main()
{
  WSADATA wsaData;
  char  strSrv[] = "www.vckbase.com" ;
  int  wsaret = WSAStartup(0x0101 ,&wsaData);
  struct  hostent* hp;
  unsigned  int  addr;
  struct  sockaddr_in server;
  char  buff[512 ] = {'/0' };
  int  y = 0 ;

  if  (wsaret)
  {
    return  -1 ;
  }

  SOCKET conn;
  conn = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  if (conn == INVALID_SOCKET)
  {
    return  -1 ;
  }

  if  (inet_addr(strSrv) == INADDR_NONE)
  {
    hp = gethostbyname(strSrv);
  }
  else
  {
    addr = inet_addr(strSrv);
    hp=gethostbyaddr((char *)&addr,sizeof (addr),AF_INET);
  }

  if  (hp == NULL )
  {
    closesocket(conn);

    return  -1 ;
  }

  //z 初始化 server 地址。
  server.sin_addr.s_addr=*((unsigned  long *)hp->h_addr);
  server.sin_family=AF_INET;
  server.sin_port=htons(80 );

  if (connect(conn,(struct  sockaddr*)&server,sizeof (server)))
  {
    closesocket(conn);
    return  -1 ;  
  }

  sprintf(buff,"GET  %s /r/n/r/n " ,"/image/mlogo.gif" );
  send(conn,buff,strlen(buff),0 );

  CFile f;
  f.Open("c: // c.gif" ,CFile::modeCreate | CFile::modeWrite);
  while (y=recv(conn,buff,512 ,0 ))
  {
    f.Write(buff,y);
  }

  f.Close();
  closesocket(conn);

  return  0 ;
}

posted @ 2011-05-22 17:17  BiG5  阅读(145)  评论(0编辑  收藏  举报