vs C++实现Socket通信、添加ws2_32.lib 静态链接库
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 静态链接库相关推荐
- 动态链接库(.dll) 动态导入库(.lib) 静态链接库(.lib)
这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自 ...
- Python3源码编译和使用静态链接库lib动态链接库dll详细介绍
说明: 本文主要介绍: 1.python3源码的下载和编译内核工程(pythoncore) 2.编译的lib和dll使用例子. 若需要编译源码PCBuild下其他python工程,类似参考内核工程(p ...
- C++动态链接库dll及静态链接库lib制作及使用教程
现需将C++函数封装成动态链接库dll,网上看了好多博客教程,说的都不够全面,现提供一个很有用的视频,亲测有效,启发很大,附上链接: 视频网址 下面自己根据视频记录下制作动态链接库dll过程,防止忘记 ...
- 动态链接库dll,静态链接库lib, 导入库lib
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称"静态库"),另一种为动态连接库(DLL,以下简称"动态库")的导入库(Imp ...
- 第五天2017/04/06(下午3:静态链接库(Lib))
原文链接:http://blog.csdn.net/xiaoding133/article/details/8973436 一.静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一 ...
- 动态链接库dll,静态链接库lib, 导入库lib 转
动态链接库dll,静态链接库lib, 导入库lib 在用VS编译工程的时候,我们会选择动态链接库dll,静态链接库lib(static library),可是为什么在编译动态链接库的时候也可以指定输出 ...
- lib与dll的关系(详解静态链接库和动态链接库)
最近接触到的游戏会有很多的dll和lib文件,之前关于动态链接库和静态链接库一直很不理解,最近发现了一篇很好的文章,非常清晰的讲解了dll与lib的关系,这里拿出来给大家分享下. 原文链接:http: ...
- 静态链接库(Lib) 与 动态链接库(DLL)
静态链接库(Lib) 与 动态链接库(DLL) 一.VS中添加LIb库及头文件(外部依赖项)的步骤: 1.添加工程的头文件目录:工程-属性-配置属性-c/c+±–常规-附加包含目录:加上头文件存放目录 ...
- 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。
静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件. 一. 静态链接库(LIB,也简称"静态库")与动态链接库(DLL,也简称"动态库 ...
- 静态链接库(Lib)和动态链接库(DLL)
序言:本文主要讲解静态链接库和动态链接库的区别,以及怎么样编译和引用两种库,怎么样从DLL中导出函数和导出C++类. 一.静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一个二进 ...
最新文章
- VINS-mono详细解读与实现
- 分布的matlab实现_图像相似度---灰度分布算法---用matlab实现
- mysql 转义字符 escape_mysql_real_escape_string转义字符串返回false?
- LA 2659 poj 3076 zoj 3122 Sudoku(精确覆盖 + DLX)
- WordPress Kyma插件里Connect和disconnect按钮的动态显示逻辑
- jquery中邮箱地址 URL网站地址正则验证实例代码
- 【HDU - 4786 】Fibonacci Tree (最小生成树变形,上下界贪心,tricks)
- android微信预览pdf,网页的pdf、office链接安卓版面微信浏览器无法打开
- Particle Filter Tutorial 粒子滤波:从推导到应用(四)
- tableview 添加手势_【iOS12+Swift5】如何在tableViewController里面给Cell添加手势
- linux安装gtk命令,Ubuntu 下安装 GTK2.0
- 云HBase内核解析
- Python入门--文件对象的常用方法,write,read,readline
- Adboost、GBDT、Xgboost 详解
- 【医院呼叫系统】基于FPGA的简易医院呼叫系统实现
- 金蝶K3后台SQL修改数据-科目余额表、科目表核算项目
- Mysql设计层优化整理总结
- SAP ABAP 常用事务代码
- MySQL的数据操作
- 物联网端-云一体化应用管理解决方案