-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2tcpclient.c
More file actions
87 lines (70 loc) · 2.13 KB
/
2tcpclient.c
File metadata and controls
87 lines (70 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main( int argc, char *argv[] ){
int sckt, bytes_recebidos;
char enviada[1024],recebida[1024];
struct hostent *host;
struct sockaddr_in server_addr;
char ip[21];
// leitura de parametros de entrada
if (argc > 1){
strcpy(ip, argv[1]);
host = gethostbyname( ip );
}
else{
printf("Nao foi possivel conectar, IP nao informado.\n");
printf("Tente: ./client < ip >\n");
return 0;
}
// verifica se o socket foi criado correntamente, caso contrario, imprime erro
if ((sckt = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Socket");
exit(1);
}
// configuracao para estabelecer conexao (endereco)
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(5000);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(server_addr.sin_zero),8);
// verifica se a conexao foi feita com sucesso, caso contrario, imprime erro
if (connect(sckt, (struct sockaddr *)&server_addr,
sizeof(struct sockaddr)) == -1)
{
printf("\nFalha ao conectar... Reinicie os procedimentos.\n");
perror("Connect");
exit(1);
}
printf("=> Conectado com sucesso.\n");
printf("\n=> Digite 'q' para encerrar conexao\n\n");
// dialogo entre servidor e cliente
while (1) {
//cliente digita a mensagem e envia ao servidor
printf("Client : ");
gets(enviada);
send(sckt,enviada,strlen(enviada), 0);
// recebe resposta do servidor
bytes_recebidos=recv(sckt,recebida,1024,0);
recebida[bytes_recebidos] = '\0';
// analisa se foi solicitado encerramento da conexao
if ( strcmp(enviada , "q")==0){
printf("Conexao encerrada.\n"); break;
}
// analise se foi recebido alguma resposta do servidor
if(strcmp(recebida, " ") != 0)
printf("Server: %s\n" , recebida);
// encerra a conexao caso tenha percorrido todo o fluxograma
if ( strcmp(recebida , "Disponha.")==0){
printf("Conexao encerrada.\n"); break;
}
}
// fecha o socket
close(sckt);
return 0;
}