#include #include #include #include #include #include #define BUFFER_SIZE 128 #define EXIT_CALL_STRING "#quit" using namespace std; 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 { // limpa o buffer memset(&message, 0, BUFFER_SIZE); printf("msg: "); gets(message); fflush(stdin); message_length = strlen(message); // envia a mensagem para o servidor if (send(remote_socket, message, message_length, 0) == SOCKET_ERROR) { WSACleanup(); closesocket(remote_socket); msg_err_exit("send() failed\n"); } } 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; }