gpt4 book ai didi

c - 我的客户端无法正确发送到服务器

转载 作者:行者123 更新时间:2023-11-30 14:59:47 26 4
gpt4 key购买 nike

我的代码有问题。

我有一个带有 posix 队列的客户端。是与 conc 服务器的 posix 队列通信。问题已解决。

mqd_t server;
mqd_t client;
struct request req; //char *name, int pos, int op...
struct reply rep; //int num, int ret...
struct mq_attr attr;

attr.mq_maxmsg = 1;
attr.mq_msgsize = sizeof(struct reply);
client = mq_open("/CLIENT", O_CREAT|O_RDONLY, 0700, &attr);
server = mq_open("/SERVER", O_WRONLY);


req.name = name;
req.op = 3;

mq_send (server, (const char *) &req, sizeof(struct req),0);
mq_receive(client, (char*)&rep, sizeof(struct reply), 0);

mq_close(server);
mq_close(client);
mq_unlink("/CLIENT");

还有这个服务器

struct db mydb[100]; //Struct with char*name....
for (int i = 0; i<100;i++){
strcpy(mydb[i].name,"");
mydb[i].vec =NULL;
mydb[i].size =0;
}

mqd_t server;

struct request mess;
struct mq_attr q_attr;
pthread_attr_t t_attr;

q_attr.mq_maxmsg = 10;
q_attr.mq_msgsize=sizeof(struct request);
server = mq_open ("/SERVER", O_CREAT|O_RDONLY, 0700, &q_attr);
if (server == -1){
perror("Er");
}

pthread_mutex_init (&mutex_msj, NULL);
pthread_cond_init (&cond_msj, NULL);
pthread_attr_init(&t_attr);

pthread_attr_setdetachstate(&t_attr, PTHREAD_CREATE_DETACHED);

while(1){
pthread_t thid;

mq_receive(server, (char*) &mess, sizeof(struct request), 0);

问题就在这里。当我打印 MESS.OP 时,我会收到“3”。我分配给客户的号码。当我这样做时,mess.op 有 0,而不是 3。

pthread_create(&thid, &t_attr, (void*)func, &mess);
...
...
...
...

}

谢谢。

最佳答案

您似乎正在使用本地 ( or automatic ) 变量 mess 调用 pthread_create() ,该变量有时会在线程实际启动之前被释放。您需要在堆上分配困惑,并非常小心地在适当的时间释放它。

此外,(void *) func 看起来也不正确,因为,

看起来好像您忽略了编译警告,或者通过随机将指针强制转换为编译器建议的类型来强制它们消失。

关于c - 我的客户端无法正确发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42541645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com