简单网络编程-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 ;
}

转载于:https://www.cnblogs.com/IS2120/archive/2011/05/22/6746042.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值