在多个* .cpp文件中使用套接字

时间:2015-06-23 07:26:25

标签: c++ sockets server

正如您在标题框中看到的,我想找到一种方法如何在多个cpp文件中使用我的套接字。

#pragma comment(lib,"ws2_32.lib")


void main()
{
  WSADATA wsaData;
  WSAStartup(MAKEWORD(2,0), &wsaData);

  SOCKET slisten,client;

  slisten = socket(AF_INET,SOCK_STREAM, 0);

  //and so on...

}

这是我使用ws2_32.lib的方式,但只是在主要方面。 我想在其他文件中使用套接字client,所以我能够 随时随地发送数据。套接字被声明为全局变量。 如果有人可以给我一个建议我会很高兴。

提前致谢。

2 个答案:

答案 0 :(得分:3)

这个问题似乎不是特定于套接字,而是一般的全局变量。 如果需要创建一个必须可由多个编译单元访问的全局变量(在本例中为套接字):

  • 您可以在一个编译单元(即一个cpp文件)中定义全局变量
  • 您在需要使用它的所有其他编译单元中使用extern语句声明变量。

进一步的信息:

  • 如果您的程序是多线程的,则需要通过std::mutex
  • 保护全局变量免于并发使用
  • 跨不同编译单元的全局变量的初始化顺序具有 undefined 行为。这称为static initialization order fiasco。您可以使用以下方式强制执行特定订单: SIngleton或某种工厂设计模式。

答案 1 :(得分:1)

使用“extern”关键字 - 它告诉链接器这个已经在这个范围的其他地方定义,应该是linkedin ..

主文件 -

SOCKET slisten,client;

其他档案:

extern SOCKET slisten,client;

https://www.youtube.com/watch?v=hDfDnsvEodQ