#include "net_mod_server_socket_wrapper.h" #include "net_mod_socket_wrapper.h" #include "bus_server_socket_wrapper.h" #include "shm_mm_wrapper.h" #include "usg_common.h" #include typedef struct Targ { int port; int id; }Targ; void sigint_handler(int sig) { // net_mod_socket_close(server_socket); // printf("===Catch sigint======================\n"); // shm_mm_wrapper_destroy(); // exit(0); } void server(int port) { void *serv = net_mod_socket_open(); net_mod_socket_bind(serv, port); int size; void *recvbuf; char sendbuf[512]; int rv; int remote_port; while (true) { if(net_mod_socket_recvfrom_timeout(serv, &recvbuf, &size, &remote_port, 0, 2000000000)==0) { printf( "RECEIVED HREARTBEAT FROM %d: %s\n", remote_port, recvbuf); net_mod_socket_sendto(serv, "suc", strlen("suc")+1, remote_port); free(recvbuf); } } // sleep(1000); net_mod_socket_close(serv); } void client(int port) { int rv; void *client = net_mod_socket_open(); int size; char sendbuf[512]; long i = 0; net_node_t node_arr[] = {"", 0, port}; int node_arr_size = 1; int recv_arr_size; net_mod_recv_msg_t *recv_arr; while (true) { sprintf(sendbuf, "%d", i); rv = net_mod_socket_sendandrecv_timeout(client, node_arr, node_arr_size, sendbuf, strlen(sendbuf)+1, NULL, NULL, 2000); //rv = net_mod_socket_sendandrecv(client, node_arr, node_arr_size, sendbuf, strlen(sendbuf)+1, NULL, NULL); printf("SEND HEART:%s, suc nodes = %d\n", sendbuf, rv); // sleep(1); i++; } net_mod_socket_close(client); } void *runclient(void *arg) { // signal(SIGINT, sigint_handler); Targ *targ = (Targ *)arg; int port = targ->port; void *client = net_mod_socket_open(); int size; char sendbuf[512]; long scale = 100000; long i = 0; net_node_t node_arr[] = {"", 0, 100}; int node_arr_size = 1; int recv_arr_size; net_mod_recv_msg_t *recv_arr; while (i < scale) { sprintf(sendbuf, "%d", i); printf("%d SEND HEART:%s\n", targ->id, sendbuf); net_mod_socket_sendandrecv(client, node_arr, node_arr_size, sendbuf, strlen(sendbuf)+1, NULL, NULL); // net_mod_socket_sendto(socket, sendbuf, strlen(sendbuf) + 1, port); i++; } net_mod_socket_close(client); return (void *)i; } void mclient(int port) { int status, i = 0, processors = 4; void *res[processors]; Targ *targs = (Targ *)calloc(processors, sizeof(Targ)); pthread_t tids[processors]; char sendbuf[512]; struct timeval start; gettimeofday(&start, NULL); for (i = 0; i < processors; i++) { targs[i].port = port; targs[i].id = i; pthread_create(&tids[i], NULL, runclient, (void *)&targs[i]); } for (i = 0; i < processors; i++) { if (pthread_join(tids[i], &res[i]) != 0) { perror("multyThreadClient pthread_join"); } else { fprintf(stderr, "client(%d) 发送 %ld 条数据\n", i, (long)res[i]); } } struct timeval end; gettimeofday(&end, NULL); double difftime = end.tv_sec * 1000000 + end.tv_usec - (start.tv_sec * 1000000 + start.tv_usec); long diffsec = (long) (difftime/1000000); long diffmsec = difftime - diffsec*1000000; printf("cost: %ld sec: %ld msc\n", diffsec, diffmsec); } int main(int argc, char *argv[]) { shm_mm_wrapper_init(512); int port; if (argc < 3) { fprintf(stderr, "Usage: reqrep %s|%s ...\n", "server", "client"); return 1; } port = atoi(argv[2]); if (strcmp("server", argv[1]) == 0) server(port); else if (strcmp("client", argv[1]) == 0) client(port); else if (strcmp("mclient", argv[1]) == 0) mclient(port); shm_mm_wrapper_destroy(); return 0; }