#include #include #include #include #include #include #define BUFFER_SIZE 128 #define EXIT_CALL_STRING "#quit" using namespace std; int clock_sinc = time(0); int clock_diff = 0; int clock_before = 0; int n ; int saida=time(0)+10; int cont; int remote_socket = 0; int message_length = 0; unsigned short remote_port = 0; char remote_ip[32]; char message[BUFFER_SIZE]; struct sockaddr_in remote_address; WSADATA wsa_data; /* Exibe uma mensagem de erro e termina o programa */ void msg_err_exit(char *msg) { fprintf(stderr, msg); system("PAUSE"); exit(EXIT_FAILURE); } int main(int argc, char **argv) { if (WSAStartup(MAKEWORD(2, 0), &wsa_data) != 0) msg_err_exit("WSAStartup() failed\n"); printf("IP do servidor: "); scanf("%s", remote_ip); fflush(stdin); printf("Porta do servidor: "); scanf("%d", &remote_port); fflush(stdin); remote_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (remote_socket == INVALID_SOCKET) { WSACleanup(); msg_err_exit("socket() failed\n"); } // preenchendo o remote_address (servidor) memset(&remote_address, 0, sizeof(remote_address)); remote_address.sin_family = AF_INET; remote_address.sin_addr.s_addr = inet_addr(remote_ip); remote_address.sin_port = htons(remote_port); printf("conectando ao servidor %s...\n", remote_ip); if (connect(remote_socket, (struct sockaddr *) &remote_address, sizeof(remote_address)) == SOCKET_ERROR) { WSACleanup(); msg_err_exit("connect() failed\n"); } //printf("digite as mensagens\n"); //do for( int cont = 0; cont <10 ; cont++) { // limpa o buffer memset(&message, 0, BUFFER_SIZE); //printf("msg: "); //gets(message); //fflush(stdin); //message_length = strlen(message); message_length = 80; //acertando contador clock_diff = clock() - clock_before; clock_before= clock(); clock_sinc = clock_sinc + clock_diff; printf("timestamp do cliente(inteiro) %u\n", clock_sinc); itoa (clock_sinc,message,10); // envia a mensagem para o servidor printf("timestamp enviado para servidor(string) %s\n", message); if (send(remote_socket, message, message_length, 0) == SOCKET_ERROR) { WSACleanup(); closesocket(remote_socket); msg_err_exit("send() failed\n"); } recv(remote_socket, message, BUFFER_SIZE, 0); printf("timestamp recebido de %s (string): %s\n", inet_ntoa(remote_address.sin_addr), message); //acertando o clock //n = (int)message; n = atoi(message); printf("timestamp recebido de %s (inteiro): %u\n", inet_ntoa(remote_address.sin_addr), n); if( n > clock_sinc ) { clock_sinc = n; printf("novo timestamp de %s: %u\n", inet_ntoa(remote_address.sin_addr), clock_sinc); } else { printf("timestamp mantido %s: %u\n", inet_ntoa(remote_address.sin_addr), clock_sinc); } } //while(strcmp(message, EXIT_CALL_STRING)); // sai quando enviar um "#quit" para o servidor printf("encerrando\n"); WSACleanup(); closesocket(remote_socket); system("PAUSE"); return 0; }