Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在线程C+内创建套接字+;_C++_Multithreading_Sockets - Fatal编程技术网

C++ 在线程C+内创建套接字+;

C++ 在线程C+内创建套接字+;,c++,multithreading,sockets,C++,Multithreading,Sockets,我有一个问题要解决。。。事情是这样的: 我被要求写两个程序,客户端和服务器端 我的客户机程序将执行一些琐碎的任务X,这将创建一个大小为N的队列 然后,客户端程序将创建N个线程,这些子线程将分别创建一个套接字,并向服务器发送一些与X有关的信息 然后,服务器从客户端接收该信息,并创建子进程来进一步处理该信息,然后将其发送回客户端 我的主要问题是如何在线程内创建套接字 #include <pthread.h> #include <stdio.h> #define NTHREA

我有一个问题要解决。。。事情是这样的:

我被要求写两个程序,客户端和服务器端

我的客户机程序将执行一些琐碎的任务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 thread\n");
        return 1;

    }       
}
// Wait for the other threads to finish.
 for (int i = 0; i < NTHREADS; i++)
        pthread_join(tid[i], NULL);
 return 0;
}
#包括
#包括
#定义第5行
作废*处理程序(作废*处理程序)
{
//随机的
//我在这里创建套接字吗?
返回NULL;
}
int main()
{
静态int x=0;
pthread_t tid[NTHREADS];
对于(int i=0;i
我的主要问题是如何在线程内创建套接字

#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 thread\n");
        return 1;

    }       
}
// Wait for the other threads to finish.
 for (int i = 0; i < NTHREADS; i++)
        pthread_join(tid[i], NULL);
 return 0;
}
process\u X
函数中的所有内容都发生在新线程中。因此,您确实创建了注释指示的套接字

所以我也需要使用argv[],所以如果它不在主函数中,我不知道怎么做

pthread\u create
的最后一个参数被传递到
process\u X
,这就是
X\u void\u ptr
的含义。您只需将
X\u void\u ptr
强制转换为需要的任何类型


我建议解析
main
函数中的CLI参数,并将数据安排在
struct
中,然后通过
pthread\u create

将数据传递到
process\u X
,这正是我在回答中所希望的。您介意为答案的最后部分编写一些..伪代码吗?解析CLI参数nts进入主函数?
argv
将包含字符串。您可能可以将主机名用作字符串(我对BSD套接字有点生疏)要创建套接字,但这对端口不起作用。要将字符串转换为整数,您可以使用
cstdlib
中的
atoi
。我相信我的套接字代码中有以下代码:port_number=atoi(argv[2]);server=gethostbyname(argv[1]);您是说我应该创建一个包含这两个参数的结构来通过pthread_create?是的,
pthread_create
只允许您传递一个参数,而不允许传递多个参数。因此,我们需要一个结构作为解决方法。与在任何其他上下文中创建任何其他套接字的方法相同。