在线程C++中创建一个套接字
Creating a socket inside a thread C++
我有一个问题要解决。。。这是怎么回事:
我需要写两个程序,客户端和服务器。
我的客户端程序将执行一些琐碎的任务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
中。
相关文章:
- 一个非常简单的win32套接字代码,但工作错误
- 在线程C++中创建一个套接字
- UDP 套接字读取最后一个传入字节
- 通过 c++ 中的 udp 套接字将派生类对象从一个进程发送到另一个进程
- 我正在编写一个简单的客户端套接字应用程序,但在连接后服务器收到一个空缓冲区
- 当我使用套接字代码发送第二条消息时,我有一个"sendto() Invalid argument"
- 是否可以寻址另一个网络中的服务器/客户端套接字?(C++)
- 我可以将一个套接字添加到多个 epoll 实例吗?
- 每个线程或每个调用一个 ZeroMQ 套接字
- QSocketNotifier:不能从另一个线程启用或禁用套接字通知程序
- 我正在尝试用 DevC++ 编译一个套接字程序,但每次我这样做时,我都会收到很多链接器错误,如下所示:
- 处理一个套接字和多个线程时异步 IO 的用例
- 服务器多线程无法保存最后一个套接字描述符
- 异步等待,直到在Asio中有一个套接字可用于读/写
- 同时等待一个条件(pthread_cond_wait)和一个套接字更改(select)
- 如何在一个套接字上实现并行请求和响应的非阻塞客户端-服务器通信模型,而不存在数据竞争
- 如何从一个套接字读取' 1 '字节,而从另一个套接字读取' read_some '字节
- 在android代码中创建一个套接字(而不是在android应用程序中)获得Permission Denied
- 通过ZeroMQ以字符串形式接收对象,然后通过另一个套接字以零拷贝发送对象的正确方法是什么
- 线程中一个套接字发送/接收