在线程C++中创建一个套接字

Creating a socket inside a thread C++

本文关键字:一个 套接字 线程 C++ 创建      更新时间:2023-10-16

我有一个问题要解决。。。这是怎么回事:

我需要写两个程序,客户端和服务器。

我的客户端程序将执行一些琐碎的任务X,它将创建一个大小为N的队列。

然后,客户端程序将创建N个线程,这些子线程将分别创建一个套接字,并向服务器发送一些与X有关的信息。

然后,服务器从客户端接收此信息,并创建子进程来进一步处理此信息,然后将其发送回客户端。

我的主要问题是如何在线程内部创建套接字。

#include <pthread.h>
#include <stdio.h>
#define NTHREADS 5
void *process_X(void *x_void_ptr)
{
//random
//do i create the socket here?
return NULL;
}
int main()
{
static int x = 0;
pthread_t tid[NTHREADS];
for(int i=0;i<NTHREADS;i++)
{
if(pthread_create(&tid[i], NULL, inc_x, &x)) 
{
fprintf(stderr, "Error creating threadn");
return 1;
}       
}
// Wait for the other threads to finish.
for (int i = 0; i < NTHREADS; i++)
pthread_join(tid[i], NULL);
return 0;
}

此外,在我得到的关于创建套接字的信息中,我将从命令行输入主机名和端口号。所以我也需要使用argv[],所以我不知道如何做到这一点,如果它不在主函数中的话。

非常感谢您的帮助。。。

我的主要问题是如何在线程内部创建套接字。

process_X函数中的所有内容都发生在新线程中。因此,您确实创建了注释所指示的套接字。

所以我也需要使用argv[],所以我不知道如何做到这一点,如果它不在主函数中的话。

pthread_create的最后一个参数被传递到process_X,这就是x_void_ptr。您可以简单地将x_void_ptr强制转换为您需要的任何类型。

我建议解析main函数中的CLI参数,并将数据排列在struct中,然后通过pthread_create将数据传递到process_X中。

相关文章: