- 论坛徽章:
- 0
|
各路Unix编程高手:
我在用消息队列作进程通信写程序时,多个客户端向服务器发起请求时,我用异步短联接,接收进程将请求包放在接收消息队列Q1中,处理进程从Q1中取出请求包,加工后,将处理结果放发送消息队列Q2中,我能成功地向Q1放消息,但却不能正确的取出,过程如下:
#define MAX_MSG_LEN 2048 /* 最大消息队列长度*/
/*----------消息队列数据包定义--------------*/
typedef struct msg_rec
{
long mtype;
char mtext[MAX_MSG_LEN];
}MSG_DATA;
MSG_DATA msgp, msgp1;
送Q1时用如下语句:
msgp.mtype=atoi(系统流水号);
bcopy( 接收到的(char *)data, msgp.mtext, data_len);
/*----发送,若消息队列满,则取出Q1的第一条-------*/
while( msgsnd(Q1msg_id,&msgp,data_len ,IPC_NOWAIT) )
msgrcv(Q1msg_id,&tmsgp,MAX_MSG_LEN,0,IPC_NOWAIT);
在Q1取数据时用如下语句:
size = msgrcv( recv_msg_id, &msgp1, MAX_MSG_LEN, 0, 0))
if (size <= 0 ) return -1;
此处我取不出数据啊,同志们,救救啊!!!
主要原因我有如下密糊:
1、送消息队列时要不要放消息类型?msgrcv()函数中的参数:数据长度是不是准确?
2、我是从Q1的第一个消息中取的,有必要设消息类型吗?
3、消息类型有何用处?是不是可用来区分多个客户端的请求包?
4、以上方式我如何改进?
拜托网上各路英豪!!!
在线等!! |
|