#include "dgram_mod_socket.h" #include "shm_mm.h" #include "usg_common.h" #include "mm.h" void server(int port, bool restart) { void * server_socket = dgram_mod_open_socket(); if(restart) { dgram_mod_force_bind(server_socket, port); } else { dgram_mod_bind(server_socket, port); } dgram_mod_start_bus(server_socket); } void *run_recv(void *socket) { pthread_detach(pthread_self()); void *recvbuf; int size; int port; while (dgram_mod_recvfrom( socket, &recvbuf, &size, &port) == 0) { printf("收到订阅消息:%s\n", recvbuf); free(recvbuf); } } void client(int port) { void *socket = dgram_mod_open_socket(); pthread_t tid; pthread_create(&tid, NULL, run_recv, socket); int size; char action[512]; char topic[512]; char content[512]; long i = 0; while (true) { //printf("Usage: pub [content] or sub \n"); printf("Can I help you? sub, pub or quit\n"); scanf("%s",action); if(strcmp(action, "sub") == 0) { printf("Please input topic!\n"); scanf("%s", topic); dgram_mod_sub(socket, topic, strlen(topic), port); printf("Sub success!\n"); } else if(strcmp(action, "pub") == 0) { // printf("%s %s %s\n", action, topic, content); printf("Please input topic and content\n"); scanf("%s %s", topic, content); dgram_mod_pub(socket, topic, strlen(topic)+1, content, strlen(content)+1, port); printf("Pub success!\n"); } else if(strcmp(action, "quit") == 0) { break; } else { printf("error input\n"); continue; } } printf("(%d) quit\n", dgram_mod_get_port(socket)); dgram_mod_close_socket(socket); } int main(int argc, char *argv[]) { shm_init(512); int port; if (argc < 3) { fprintf(stderr, "Usage: %s %s|%s ...\n", argv[0], "server", "client"); return 1; } port = atoi(argv[2]); if (strcmp("server", argv[1]) == 0) { if(argc >= 4 && strcmp("restart", argv[3]) == 0) { server(port, true); } else{ server(port, false); } } if (strcmp("client", argv[1]) == 0) client(port); return 0; }