2017-03-01 11 views
0

私のコードに問題があります。クライアントがサーバーに正しく送信されない

私はこのクライアントにposixキューを持っています。 posixのキューとconcサーバが通信していますか? 質問がありません。

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は3でなく0を持つ。

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

} 

ありがとう。

+0

あなたのコードはあまりにも厄介です、あなたはそれが読みやすいようにフォーマットできますか? –

+0

ツアーを読んでください。そうしないでください。 –

答えて

1

あなたがスレッドが実際に開始される前に、時には割り当てが解除されているローカル(or automatic)変数messpthread_create()を呼び出しているように思われます。ヒープ上にmessを割り当て、適切なタイミングで解放するように十分注意する必要があります。正しいタイプがvoid *(*)(void *)

であり、あなたがコンパイル警告を無視して、またはランダムにキャストして消えるようにそれらを強制されたかのように見えるでしょう

  • 、ので

    また(void *) func右を見ていませんコンパイラが提案した型へのポインタ。

+0

はい、前のコマンドラインに障害が表示されます。 mq_receiveで混乱を受けたとき。 Mess.opは0ではない3、混乱で受け取ったすべてのデータは0です。理由はわかりません。 – Fils

関連する問題