zoukankan      html  css  js  c++  java
  • 简单网络编程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 ;
    }

  • 相关阅读:
    dedecms 5.7 站点文件从本地子目录上传到远程根目录后找不到模板的解决方案
    Dedecms实现"文章标题2级栏目1级栏目网站名"
    织梦安装在子目录会出现问题的解决技巧集合
    ASP.NET三层架构中数据层数据访问类部分代码
    织梦DEDECMS缩短URL路径长度的方法
    CSS各种属性全集
    css和js引用图片路径
    ASP.Net中FileUpLoad控件内容清空
    WampServer的配置
    asp.net 中的 callback
  • 原文地址:https://www.cnblogs.com/IS2120/p/6746042.html
Copyright © 2011-2022 走看看