Windows网络编程(一):跨平台创建socket

在windows下创建socket首先需要加载动态库,Linux下则不需要。

首先创建控制台应用程序,并添加如下代码:

#include "pch.h"
#include 
#include 

int main()
{
	WSADATA ws;
	//增加动态库引用,并加载进来(一定要在socket函数前调用,需要释放)。
	WSAStartup(MAKEWORD(2, 2), &ws);

	return 0;
}

这段代码在链接时会报出以下错误:

我们需要先添加链接库:

Windows网络编程(一):跨平台创建socket_第1张图片


接下来,需要创建socket,代码如下:

#include "pch.h"
#include 
#include 

int main()
{
	using namespace std;
	WSADATA ws;
	//增加动态库引用,并加载进来(一定要在socket函数前调用,需要释放)。
	WSAStartup(MAKEWORD(2, 2), &ws);
	//协议(此处是tcp/ip,tcp,第三参数可设可不设)
	int sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock == -1) {
		cout << "Create socket failed" << endl;
	}
	cout << "[" << sock << "]";
	closesocket(sock);
	return 0;
}

##include "pch.h"
#ifndef linux
#include 
#else
#include
#include
#include
#define closesocket close
#endif 
#include 

int main()
{
	using namespace std;
#ifndef linux
	WSADATA ws;
	//增加动态库引用,并加载进来(一定要在socket函数前调用,需要释放)。
	WSAStartup(MAKEWORD(2, 2), &ws);
#endif // !linux

	//协议(此处是tcp/ip,tcp,第三参数可设可不设)
	auto sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock == -1) {
		cout << "Create socket failed" << endl;
	}
	cout << "[" << sock << "]";
	closesocket(sock);
	return 0;
}

由于linux和windows中头文件不同,因此需要使用#ifdef进行处理,另外,linux中socket函数也不需要注册。

你可能感兴趣的:(socket)