| | |
| | | } |
| | | } |
| | | |
| | | |
| | | void *serverSockt; |
| | | |
| | | void start_reply(int key) { |
| | | printf("start reply\n"); |
| | | void *ser = net_mod_socket_open(); |
| | | net_mod_socket_bind(ser, key); |
| | | int size; |
| | | void *recvbuf; |
| | | static void _recvandsend_callback_(void *recvbuf, int recvsize, int key, void **sendbuf_ptr, int *sendsize_ptr, void * user_data) { |
| | | char sendbuf[512]; |
| | | printf( "server: RECEIVED REQUEST FROM %d : %s\n", key, (char *)recvbuf); |
| | | sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(serverSockt), (char *)recvbuf); |
| | | // buf 和 size是返回值 |
| | | *sendbuf_ptr = sendbuf; |
| | | *sendsize_ptr = strlen(sendbuf) + 1; |
| | | //recvbuf是分配到堆里的,使用完后不要忘记释放掉 |
| | | free(recvbuf); |
| | | return; |
| | | } |
| | | |
| | | |
| | | void start_reply(int mkey) { |
| | | printf("start reply\n"); |
| | | serverSockt = net_mod_socket_open(); |
| | | net_mod_socket_bind(serverSockt, mkey); |
| | | |
| | | int rv; |
| | | int remote_port; |
| | | while ( (rv = net_mod_socket_recvfrom(ser, &recvbuf, &size, &remote_port) ) == 0) { |
| | | // printf( "server: RECEIVED REQUEST FROM PORT %d NAME %s\n", remote_port, recvbuf); |
| | | sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(ser), (char *)recvbuf); |
| | | net_mod_socket_sendto(ser, sendbuf, strlen(sendbuf) + 1, remote_port); |
| | | free(recvbuf); |
| | | while(true) { |
| | | rv = net_mod_socket_recvandsend_timeout(serverSockt, _recvandsend_callback_ , 0, 2000000, NULL ); |
| | | } |
| | | // while ( (rv = net_mod_socket_recvfrom(ser, &recvbuf, &size, &key) ) == 0) { |
| | | // // printf( "server: RECEIVED REQUEST FROM %d NAME %s\n", key, recvbuf); |
| | | // sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(ser), (char *)recvbuf); |
| | | // net_mod_socket_sendto(ser, sendbuf, strlen(sendbuf) + 1, key); |
| | | // free(recvbuf); |
| | | // } |
| | | } |
| | | |
| | | // 交互式客户端 |
| | |
| | | if (fgets(content, MAXLINE, stdin) != NULL) { |
| | | // 收到消息的节点即使没有对应的信息, 也要回复一个表示无的消息,否则会一直等待 |
| | | // n = net_mod_socket_sendandrecv(client, node_arr, node_arr_size, content, strlen(content), &recv_arr, &recv_arr_size); |
| | | n = net_mod_socket_sendandrecv_timeout(client, node_arr, node_arr_size, content, strlen(content), &recv_arr, &recv_arr_size, 1000); |
| | | n = net_mod_socket_sendandrecv_timeout(client, node_arr, node_arr_size, content, strlen(content), &recv_arr, &recv_arr_size, 1); |
| | | printf(" %d nodes reply\n", n); |
| | | for(i=0; i<recv_arr_size; i++) { |
| | | printf("reply from (host:%s, port: %d, key:%d) >> %s\n", |
| | |
| | | sprintf(sendbuf, hello_format, net_mod_socket_get_key(client), l); |
| | | // fprintf(fp, "requst:%s\n", sendbuf); |
| | | // n = net_mod_socket_sendandrecv(client, node_arr, node_arr_size, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size); |
| | | n = net_mod_socket_sendandrecv_timeout(client, targ->node, 1, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size, 1000); |
| | | n = net_mod_socket_sendandrecv_timeout(client, targ->node, 1, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size, 1); |
| | | printf("%d: send %d nodes\n", l, n); |
| | | for(j=0; j < recv_arr_size; j++) { |
| | | |
| | |
| | | } |
| | | net_mod_socket_close(client); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | int main(int argc, char *argv[]) { |