c语言消息队列 私聊 代码
时间: 2023-09-02 11:08:42 浏览: 76
C语言编写的聊天代码
下面是一个简单的基于 POSIX 消息队列的 C 语言私聊程序代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>
#define MAX_MSG_SIZE 256
#define QUEUE_PERMISSIONS 0660
#define MAX_USERS 10
typedef struct {
char from_user[20];
char to_user[20];
char msg[MAX_MSG_SIZE];
} message;
char *users[MAX_USERS] = {"Alice", "Bob", "Charlie"};
int num_users = 3;
mqd_t open_queue(char *user) {
char queue_name[20];
sprintf(queue_name, "/%s_queue", user);
mqd_t queue = mq_open(queue_name, O_RDWR | O_CREAT, QUEUE_PERMISSIONS, NULL);
if (queue == -1) {
perror("mq_open");
exit(1);
}
return queue;
}
int get_user_id(char *user) {
for (int i = 0; i < num_users; i++) {
if (strcmp(users[i], user) == 0) {
return i;
}
}
return -1;
}
void send_message(char *from_user, char *to_user, char *msg) {
int to_id = get_user_id(to_user);
if (to_id == -1) {
printf("User %s not found!\n", to_user);
return;
}
mqd_t to_queue = open_queue(to_user);
message msg_data;
strcpy(msg_data.from_user, from_user);
strcpy(msg_data.to_user, to_user);
strcpy(msg_data.msg, msg);
if (mq_send(to_queue, (char *)&msg_data, sizeof(message), 0) == -1) {
perror("mq_send");
exit(1);
}
mq_close(to_queue);
}
void receive_messages(char *user) {
mqd_t queue = open_queue(user);
message msg_data;
while (mq_receive(queue, (char *)&msg_data, sizeof(message), NULL) != -1) {
printf("Message from %s: %s\n", msg_data.from_user, msg_data.msg);
}
mq_close(queue);
}
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: ./chat <user>\n");
exit(1);
}
char *user = argv[1];
if (get_user_id(user) == -1) {
printf("User %s not found!\n", user);
exit(1);
}
receive_messages(user);
return 0;
}
```
这个程序包含两个函数:`send_message` 和 `receive_messages`。`send_message` 函数用于将消息发送给另一个用户,`receive_messages` 函数用于接收该用户收到的消息。
使用方法:
1. 编译程序:`gcc -o chat chat.c -lrt`
2. 启动 Alice 用户的程序:`./chat Alice`
3. 启动 Bob 用户的程序:`./chat Bob`
4. 在 Alice 终端输入消息:`send_message Bob "Hello, Bob!"`
5. 在 Bob 终端可以看到收到的消息:`Message from Alice: Hello, Bob!`
阅读全文