我的客户端没有正确发送到服务器
问题描述:
我的代码有问题。我的客户端没有正确发送到服务器
我有这个客户与posix队列。是一个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);
这里就是问题所在。当我PRINF MESS.OP我会记录“3”。我签下客户的号码。当我这样做,mess.op有0,而不是3.
pthread_create(&thid, &t_attr, (void*)func, &mess);
...
...
...
...
}
谢谢。
答
看起来你打电话pthread_create()
与本地(or automatic)变量mess
有时在实际启动线程之前解除分配。您需要在堆上分配mess
,并且要非常小心地在适当的时候释放它。
而且(void *) func
看起来不正确的,因为,
- 正确的类型是
void *(*)(void *)
并且如果你忽视编译警告,或迫使他们这样看来通过随机铸造消失一个指向编译器建议类型的指针。
+0
是的,但故障出现在前一个命令行中。当我收到与mq_receive混乱。 Mess.op会是3而不是0,所有收到的数据都是0。我不知道为什么。 – Fils
你的代码太乱了,你能格式化它,所以它的可读性? –
请阅读旅程,不要这样做。 –