1. 在vs下添加ws2_32.lib库

右键【项目】-【属性】-【链接器】-【输入】-【附加依赖项】,进行编辑,添加 ws2_32.lib库,去掉从父级或项目默认设置继承的勾选,如下图所示:

注意,下面的服务器端和客户端代码均写入了这一句——#pragma comment(lib, "ws2_32.lib") //加载 ws2_32.lib,因此两个程序都需要添加ws2_32.lib静态链接库。

2. 服务器端代码Sever.cpp

#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")  //加载 ws2_32.dllint main(){//初始化 DLLWSADATA wsaData;WSAStartup( MAKEWORD(2, 2), &wsaData);//创建套接字SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);//绑定套接字sockaddr_in sockAddr;memset(&sockAddr, 0, sizeof(sockAddr));  //每个字节都用0填充sockAddr.sin_family = PF_INET;  //使用IPv4地址sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址sockAddr.sin_port = htons(1234);  //端口bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));//进入监听状态listen(servSock, 20);//接收客户端请求SOCKADDR clntAddr;int nSize = sizeof(SOCKADDR);SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);//向客户端发送数据char *str = "Hello World!";send(clntSock, str, strlen(str)+sizeof(char), NULL);//关闭套接字closesocket(clntSock);closesocket(servSock);//终止 DLL 的使用WSACleanup();return 0;
}

在运行服务器端代码时,有的vs会出现如下错误error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings,如下图:

这是因为inet_addr是一个老函数,而微软就是喜欢强迫别人用它的新函数。

【解决方案】

1. 用socket的新函数代替程序出现的所有老函数,此方法学习成本太高。

2. 在项目属性里设置,告诉编译器,我就用老函数,让她不要报错了。

所以推荐使用第二种解决方案,设置方法如下:

右键【项目】-【属性】-【配置属性】-【C/C++】-【常规】-【SDL检查】的值改为“否”,如下图:

再次运行,就不会报错了。

3. 客户端代码Client.cpp

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")  //加载 ws2_32.dll
int main(){//初始化DLLWSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);//创建套接字SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);//向服务器发起请求sockaddr_in sockAddr;memset(&sockAddr, 0, sizeof(sockAddr));  //每个字节都用0填充sockAddr.sin_family = PF_INET;sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");sockAddr.sin_port = htons(1234);connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));//接收服务器传回的数据char szBuffer[MAXBYTE] = {0};recv(sock, szBuffer, MAXBYTE, NULL);//输出接收到的数据printf("Message form server: %s\n", szBuffer);//关闭套接字closesocket(sock);//终止使用 DLLWSACleanup();system("pause");return 0;
}

4. 运行调试

先运行 服务器端程序,再运行客户端程序,输出结果为:
Message form server: Hello World!

值得注意的是,由于这两个程序没有写入while循环,所以server 只接受一次 client 请求,当 server 向 client 传回数据后,程序就运行结束了。如果想再次接收到服务器的数据,必须再次运行 server,这只是一个非常简陋的 socket 程序,不能够一直接受客户端的请求。

本文的存在,只是为了讲述在vs环境下,跑通Socket程序的流程以及会遇到的问题及解决方法。

vs C++实现Socket通信、添加ws2_32.lib 静态链接库相关推荐

  1. 动态链接库(.dll) 动态导入库(.lib) 静态链接库(.lib)

    这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自 ...

  2. Python3源码编译和使用静态链接库lib动态链接库dll详细介绍

    说明: 本文主要介绍: 1.python3源码的下载和编译内核工程(pythoncore) 2.编译的lib和dll使用例子. 若需要编译源码PCBuild下其他python工程,类似参考内核工程(p ...

  3. C++动态链接库dll及静态链接库lib制作及使用教程

    现需将C++函数封装成动态链接库dll,网上看了好多博客教程,说的都不够全面,现提供一个很有用的视频,亲测有效,启发很大,附上链接: 视频网址 下面自己根据视频记录下制作动态链接库dll过程,防止忘记 ...

  4. 动态链接库dll,静态链接库lib, 导入库lib

    目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称"静态库"),另一种为动态连接库(DLL,以下简称"动态库")的导入库(Imp ...

  5. 第五天2017/04/06(下午3:静态链接库(Lib))

    原文链接:http://blog.csdn.net/xiaoding133/article/details/8973436 一.静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一 ...

  6. 动态链接库dll,静态链接库lib, 导入库lib 转

    动态链接库dll,静态链接库lib, 导入库lib 在用VS编译工程的时候,我们会选择动态链接库dll,静态链接库lib(static library),可是为什么在编译动态链接库的时候也可以指定输出 ...

  7. lib与dll的关系(详解静态链接库和动态链接库)

    最近接触到的游戏会有很多的dll和lib文件,之前关于动态链接库和静态链接库一直很不理解,最近发现了一篇很好的文章,非常清晰的讲解了dll与lib的关系,这里拿出来给大家分享下. 原文链接:http: ...

  8. 静态链接库(Lib) 与 动态链接库(DLL)

    静态链接库(Lib) 与 动态链接库(DLL) 一.VS中添加LIb库及头文件(外部依赖项)的步骤: 1.添加工程的头文件目录:工程-属性-配置属性-c/c+±–常规-附加包含目录:加上头文件存放目录 ...

  9. 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。

    静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件. 一. 静态链接库(LIB,也简称"静态库")与动态链接库(DLL,也简称"动态库 ...

  10. 静态链接库(Lib)和动态链接库(DLL)

    序言:本文主要讲解静态链接库和动态链接库的区别,以及怎么样编译和引用两种库,怎么样从DLL中导出函数和导出C++类. 一.静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一个二进 ...

最新文章

  1. VINS-mono详细解读与实现
  2. 分布的matlab实现_图像相似度---灰度分布算法---用matlab实现
  3. mysql 转义字符 escape_mysql_real_escape_string转义字符串返回false?
  4. LA 2659 poj 3076 zoj 3122 Sudoku(精确覆盖 + DLX)
  5. WordPress Kyma插件里Connect和disconnect按钮的动态显示逻辑
  6. jquery中邮箱地址 URL网站地址正则验证实例代码
  7. 【HDU - 4786 】Fibonacci Tree (最小生成树变形,上下界贪心,tricks)
  8. android微信预览pdf,网页的pdf、office链接安卓版面微信浏览器无法打开
  9. Particle Filter Tutorial 粒子滤波:从推导到应用(四)
  10. tableview 添加手势_【iOS12+Swift5】如何在tableViewController里面给Cell添加手势
  11. linux安装gtk命令,Ubuntu 下安装 GTK2.0
  12. 云HBase内核解析
  13. Python入门--文件对象的常用方法,write,read,readline
  14. Adboost、GBDT、Xgboost 详解
  15. 【医院呼叫系统】基于FPGA的简易医院呼叫系统实现
  16. 金蝶K3后台SQL修改数据-科目余额表、科目表核算项目
  17. Mysql设计层优化整理总结
  18. SAP ABAP 常用事务代码
  19. MySQL的数据操作
  20. 物联网端-云一体化应用管理解决方案

热门文章

  1. Apache roller
  2. Python 算法交易实验30 退而结网7-交易策略思考
  3. rockchip Android平台动态替换开机logo的实现
  4. 软件的工程化管理(二)(转)
  5. Simply Fortran 保姆级教程
  6. html登陆滑动验证,js实现登录时的滑动验证【原创】
  7. 我为什么要翻译ES6官方文档
  8. Dsoframer控件的下载及注册
  9. 一页纸搞定项目管理:定义、要素及操作步骤(附可编辑模板及电子书)
  10. 国家电网考试计算机基础知识,大学计算机基础(国家电网考试整理)