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

时间:2017-03-01 20:41:40

标签: c queue pthreads posix

我的代码存在问题。

我有这个带有posix队列的客户端。是一个posix队列与一个conc服务器通信。 问题出现了。

pattern = re.compile(r'Listing(.+?)(?=\n)')
df = pd.read_excel(file_path)
        print("df is:", df)
        a = pattern.findall(str(df))
        print("a:", a)

这个服务器

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");

这里是问题所在。当我告诉MESS.OP我会回复“3”。我签署客户的号码。当我这样做时,mess.op有0而不是3。

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);

感谢。

1 个答案:

答案 0 :(得分:1)

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

同样(void *) func看起来并不正确,因为

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