//msgclient.c #include <stdio.h> #include <sys/types.h> #include <sys/msg.h> #include <sys/ipc.h> #include <stdlib.h> #include <string.h> #define BUF_SIZE 256 #define PATH_NAME "." #define PROJ_ID 2 struct mymsgbuf { long msgtype; char string[BUF_SIZE]; }msgbuf; key_t msgkey; int qid; int len; char msg[BUF_SIZE]; void remsg()//接受消息处理 { len = sizeof(msgbuf)-4; msgrcv(qid,&msgbuf,len,3,0);//接受消息 if(strncmp("exit",msgbuf.string,4)== 0)//exit 退出聊天 { printf("server exit!/n"); exit(1); } printf("server: %s/n",msgbuf.string); } void semsg()//发送消息处理 { msgbuf.msgtype = 5;//消息类型 printf("client:"); fgets(msg,BUF_SIZE,stdin); if(strncmp("exit",msg,4)== 0) //exit 退出聊天 { strcpy(msgbuf.string,msg); len = sizeof(msgbuf)-4; msgsnd(qid,&msgbuf,len,0); exit(1); } strcpy(msgbuf.string,msg); msgsnd(qid,&msgbuf,len,0);//发送消息 } int main(int argc, char ** argv) { if((msgkey=ftok(PATH_NAME, PROJ_ID)) == -1)//获取键值 { printf("ftok error!/n"); exit (1); } if((qid = msgget(msgkey,IPC_CREAT|0660)) == -1)//获取消息id号 { printf("msgget error !/n"); exit (1); } while(1) { remsg(); semsg(); } } //msgserver.c #include <stdio.h> #include <sys/types.h> #include <sys/msg.h> #include <sys/ipc.h> #include <stdlib.h> #include <string.h> #define BUF_SIZE 256 #define PATH_NAME "." #define PROJ_ID 2 struct mymsgbuf { long msgtype; char string[BUF_SIZE]; }msgbuf; key_t msgkey; int qid; int len; char msg[BUF_SIZE]; void semsg()//发送消息处理 { msgbuf.msgtype = 3;//消息类型 printf("server:"); fgets(msg,BUF_SIZE,stdin); if(strncmp("exit",msg,4)== 0)//exit 退出聊天 { strcpy(msgbuf.string,msg); len = sizeof(msgbuf)-4; msgsnd(qid,&msgbuf,len,0); exit(1); } strcpy(msgbuf.string,msg); len = sizeof(msgbuf)-4; msgsnd(qid,&msgbuf,len,0); //发送消息 } void remsg()//接收消息处理 { msgrcv(qid,&msgbuf,len,5,0);//接收消息 if(strncmp("exit",msgbuf.string,4)== 0)//exit 退出聊天 { printf("client exit!/n"); exit(1); } printf("client: %s/n",msgbuf.string); } int main(int argc, char ** argv) { if((msgkey=ftok(PATH_NAME, PROJ_ID)) == -1)//获取键值 { printf("ftok error!/n"); exit (1); } if((qid = msgget(msgkey,IPC_CREAT|0660)) == -1)//获取消息id号 { printf("msgget error !/n"); exit (1); } while(1) { semsg(); remsg(); } } name:5+x 消息队列感觉已经是比较简单的通信了,,学到socket的时候,头疼头疼,,唉.,.,.,.,我自己看着办呗 这程序其实还不完善的,服务端创建的消息队列最后还没有删除,- -!,而且感觉也很臃肿,,应该还可以优化的,这程序只供大家参考参考``` 消息队列是先获取键值,再用键值得到消息id号,从而先链表式那样进行发送和接收消息,...