Я пишу базовую серверную программу, которая должна получать два типа сообщений от клиентов (первое сообщение относится к типу 1, а второе - к типу 2).Кажется, что он не видит сообщения от клиентов, которые были отправлены должным образом (msgsnd не возвращает -1).Я прочитал, что это может быть вызвано слишком большим сообщением, но мои сообщения имеют длину в несколько символов и мой буфер равен 100. Я не обнаружил никаких различий в создаваемых структурах, msgget также не возвращает никаких ошибок.Вот код программы сервера:
struct msgbuf
{
long type;
char text[100];
}m1;
int main()
{
int id;
if (id = msgget(1998,0666|IPC_EXCL)==-1) {
printf("msgget error");
}
char first_msg[100][100];
char second_msg[100][100];
int counter = 0;
while (counter < 100) {
msgrcv(id,&m1,sizeof(m1.text),1,0);
printf("%s",m1.text);
strcpy(first_msg[counter], m1.text);
msgrcv(id,&m1,sizeof(m1.text),2,0);
printf("%s",m1.text);
strcpy(second_msg[counter],m1.text);
counter++;
}
return 0;
}
И код клиента:
struct msgbuf
{
long type;
char text[100];
};
int main()
{
struct msgbuf m1,m2;
int id;
if ((id = msgget(1998,0666|IPC_EXCL)) == -1) {
printf("error");
}
char first_msg[90];
scanf("%s",&first_msg[0]);
char second_msg[90];
scanf("%s",&second_msg[0]);
m1.type = 1;
strcpy(m1.text,first_msg);
if (msgsnd(id,&m1,sizeof(m1.text),0) == -1) {
perror("msgsnd failed");
}
m2.type = 2;
strcpy(m2.text,second_msg);
if (msgsnd(id,&m2,sizeof(m2.text),0)==-1) {
perror("msgsnd2 failed");
}
return 0;
}