VC和服务器建立TCP连接不像VB的winsock那样两三行代码就能搞定。虽然VC得MFC类库中也有CSocket、CAsyncSocket这样的类,但是这些类的毛病太多,还是返璞归真用socket api来的灵活。

每次用到都得查一遍流程,这次写个几乎通用的模板,以备以后用。

注:
1.因为socket只能传入IP地址,所以要想连接还得先解析域名,以下包括把域名解析为IP的代码。
2.以下代码为阻塞模式(并非异步模式)所以在主线程中使用很可能阻塞程序运行,最好是新开个线程使用。

int retVal;
   WORD wVersionRequested;
   WSADATA wsaData;
   int err;
 
//构建保存版本号的WORD类型变量
   wVersionRequested = MAKEWORD( 1, 1 );
 
//加载套接字库
   err = WSAStartup( wVersionRequested, &wsaData );
   if ( err != 0 ) {
    return 0;
   }
 
//检查加载的套接字库版本和请求的是否一致
   if ( LOBYTE( wsaData.wVersion ) != 1 ||
    HIBYTE( wsaData.wVersion ) != 1 ) {
    WSACleanup( );
    return 0;
   }

//定义DWORD类型变量dwIP 该变量保存解析得到的IP地址(32位整数 并非点分十进制字符串)
DWORD dwIP = 0;
   //域名解析
   HOSTENT* pHS = gethostbyname(strdomain);
   if(   pHS   !=   NULL)  
   {  
    in_addr addr;  
    CopyMemory(&addr.S_un.S_addr, pHS->h_addr_list[0], pHS->h_length);  
    dwIP = addr.S_un.S_addr;  
   }
   else
   {
    WSACleanup();
    return 0;
   }

//创建套接字,第一个参数是地址族 TCP/IP下始终为AF_INET,第二个参数表示流式套接字,第三个参数指定协议,0表示系统自选协议 而对于流式套接字 系统的自选协议就是TCP协议
SOCKET sckTongJi = socket(AF_INET, SOCK_STREAM, 0);

//定义地址结构体 并初始化
SOCKADDR_IN addrSvr;
   addrSvr.sin_family = AF_INET;
   addrSvr.sin_addr.S_un.S_addr = dwIP; //inet_addr("127.0.0.1"); //字符串转十六进制IP用inet_addr反之用inet_ntoa
   addrSvr.sin_port = htons(80); //使用网络字序 不同处理器高位在前 还是 低位在前不相同 在这儿统一

retVal = connect(sckTongJi, (SOCKADDR*)&addrSvr, sizeof(SOCKADDR_IN));
   if (retVal)
   {
    //AfxMessageBox("connect error!");
    WSACleanup();
    return 0;
   }
   char strbuff[4096];

memset(strbuff, 0, sizeof(strbuff));
   send(sckTongJi, strout, strout.GetLength(), 0);
   recv(sckTongJi, strbuff, 4096, 0);
   closesocket(sckTongJi);
   WSACleanup();

转载于:https://www.cnblogs.com/huhu0013/archive/2010/12/02/1894098.html

vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板相关推荐

  1. python创建tcp socket_Python Socket如何建立TCP连接

    在 Python 程序中创建 TCP 服务器时,创建通用 TCP 服务器的一般演示代码如下.需要记住的是,这仅是设计服务器的一种方式.一旦熟悉了服务器设计,可以修改下面的代码来操作服务器. ss = ...

  2. W5500开发笔记 | 02 - 使用W5500 Socket API 建立TCP服务端、TCP客户端

    系列文章 W5500开发笔记 | 01- W5500 Socket API的说明 一.实现思路 W5500内部是硬件TCP/IP协议栈,对外(MCU)只是提供了操作socket的能力,内部支持8个独立 ...

  3. Socket accept建立TCP连接失败

    本地作为服务端accept一直无法建立连接,在wiresharp中可以看到远端不断发过来SYN消息. 本地作为客户端可以connect远端. 原因:windows 防火墙没有完全关闭,之关闭了专用网络 ...

  4. java建立tcp连接测试feiq

    java建立tcp连接 import java.io.IOException; import java.net.Socket; import java.net.UnKnowHostException; ...

  5. 8. 【gRPC系列学习】resetTransport建立TCP连接流程

    在Balance实现UpdateClientConnState方法过程中会调用Connect()方法,该方法会调用resetTransport建立TCP连接,本节分析resetTransport执行流 ...

  6. 【从浏览器地址栏输入 url 到请求返回的过程】——3.建立TCP 连接

    1.TCP是什么? TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的.可靠的.基于字节流的传输层通信协议.. 2.建立TCP连接的过程(三次握手) 三 ...

  7. 记一次因tcp_tw_recycle误设置为1导致服务器无法正常建立TCP连接的问题排查

    背景 为某SaaS平台的数据推送服务写的接口无法及时响应数据推送请求,导致频繁出现因请求超时而导致的数据推送失败,进而严重影响业务使用.接口部署在公司的阿里云上. 故障点梳理 #mermaid-svg ...

  8. Python攻防-Socket通信建立TCP反向连接

    文章目录 前言 远程控制 脚本编写 效果演示 脚本优化 getopt () 完整代码 效果演示 前言 本文将记录学习基于 Socket 通信机制建立 TCP 反向连接,借助 Python 脚本实现主机 ...

  9. Linux下socket编程:TCP连接

    目录 一.流程简述     服务器端     客户端 二.概念及函数     1.套接字描述符     2.socket函数     3.bind函数     4.connect函数     5.li ...

最新文章

  1. AAAI 2020论文解读:商汤科技发布新视频语义分割和光流联合学习算法
  2. 大型网站技术架构(七)网站的可扩展性架构
  3. ACP-PMP备考交流
  4. Scala Array中_ filter map的用法示例
  5. 【备忘】XP欢迎页中隐藏用户名
  6. jvm初体验:堆溢出处理
  7. android开发深入浅出,Android开发深入浅出RxJava(一:基础篇)
  8. 【转】NAT穿透技术
  9. #import 指令 (C++)
  10. 【附源码】计算机毕业设计java学科竞赛赛场安排系统设计与实现
  11. android身高控件_Android 滑动选择身高体重控件——RulerView
  12. windows电脑防火墙关闭,一键系统防火墙关闭工具推荐
  13. 2020读书笔记 《马歇尔传记》
  14. 循序渐进实现仿QQ界面(三):界面调色与控件自绘
  15. 32位系统无法运行64位系统安装文件
  16. Java:File和IO流
  17. 一篇文章搞懂 HDFS 的配额管理
  18. princeton 本科cos318操作系统教程-2概述
  19. jquery和js获取临近节点
  20. 开源中国 开源世界2019_5个2019年开源决议

热门文章

  1. 启动器中图标的默认路径
  2. mariadb设置root初始密码
  3. notes from《classification and regression trees》
  4. 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
  5. NoSQL, Clojure
  6. 清华大学梁宸计算机系,2015年广东高考高等学校自主招生录取考生名单公示(2)...
  7. 华为电视再传消息,海思正在研发相关芯片
  8. MongoDB-pymongo
  9. 仿QQ联系人的TableView的折叠与拉伸
  10. Slide:配置Oracle 10g双向流复制