Well, I was programming a simple messaging system, when I tried the same computer, it worked correctly without any problems, but when I tested on two different computers, the server did not receive the message from the client I created, help me?
Customer Code
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#define SERVER "127.0.0.1"
#define BUFFTAM 1024 //Tamanho maximo do buffer
#define PORTA 8888 //A porta na qual sera enviado os dados
void terminar(char *s)
{
perror(s);
exit(1);
}
void IniciarCliente()
{
struct sockaddr_in servidorsock;/*definindo as variaveis*/
int s, slen=sizeof(servidorsock);
char buf[BUFFTAM];
char mensagem[BUFFTAM];
if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
terminar("socket");
}
memset((char *) &servidorsock, 0, sizeof(servidorsock));
servidorsock.sin_family = AF_INET;
servidorsock.sin_port = htons(PORTA);
if (inet_aton(SERVER , &servidorsock.sin_addr) == 0)
{
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
while(strcmp(buf,"fim\n")!=0){
printf("Digite uma mensagem : ");
fgets(mensagem,BUFFTAM,stdin);
//Envia a mensagem
if (sendto(s, mensagem, strlen(mensagem) , 0 , (struct sockaddr *) &servidorsock, slen)==-1){
terminar("sendto()");
}
//recebe uma mensagem de volta e printa ela na tela
//limpa o buffer de dados
memset(buf,'#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ctype.h>
#define BUFFTAM 1024
#define PORTA 8888
void terminar(char *s)
{
perror(s);
exit(1);
}
void IniciarServer(){
struct sockaddr_in servidorsock, cliente;
int s, slen = sizeof(cliente);
char buf[BUFFTAM];
//cria um scoket udp
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
terminar("socket");
}
// zera a estrutura
memset((char *) &servidorsock, 0, sizeof(servidorsock));
servidorsock.sin_family = AF_INET;
servidorsock.sin_port = htons(PORTA);
servidorsock.sin_addr.s_addr = htonl(INADDR_ANY);
//faz o bind do socket com a porta
if( bind(s , (struct sockaddr*)&servidorsock, sizeof(servidorsock) ) == -1){
terminar("bind");
}
//espera por dados
while(strcmp(buf,"fim\n")!=0){
printf("Esperando por dados\n");
fflush(stdout);
memset(buf,'#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#define SERVER "127.0.0.1"
#define BUFFTAM 1024 //Tamanho maximo do buffer
#define PORTA 8888 //A porta na qual sera enviado os dados
void terminar(char *s)
{
perror(s);
exit(1);
}
void IniciarCliente()
{
struct sockaddr_in servidorsock;/*definindo as variaveis*/
int s, slen=sizeof(servidorsock);
char buf[BUFFTAM];
char mensagem[BUFFTAM];
if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
terminar("socket");
}
memset((char *) &servidorsock, 0, sizeof(servidorsock));
servidorsock.sin_family = AF_INET;
servidorsock.sin_port = htons(PORTA);
if (inet_aton(SERVER , &servidorsock.sin_addr) == 0)
{
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
while(strcmp(buf,"fim\n")!=0){
printf("Digite uma mensagem : ");
fgets(mensagem,BUFFTAM,stdin);
//Envia a mensagem
if (sendto(s, mensagem, strlen(mensagem) , 0 , (struct sockaddr *) &servidorsock, slen)==-1){
terminar("sendto()");
}
//recebe uma mensagem de volta e printa ela na tela
//limpa o buffer de dados
memset(buf,'#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ctype.h>
#define BUFFTAM 1024
#define PORTA 8888
void terminar(char *s)
{
perror(s);
exit(1);
}
void IniciarServer(){
struct sockaddr_in servidorsock, cliente;
int s, slen = sizeof(cliente);
char buf[BUFFTAM];
//cria um scoket udp
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
terminar("socket");
}
// zera a estrutura
memset((char *) &servidorsock, 0, sizeof(servidorsock));
servidorsock.sin_family = AF_INET;
servidorsock.sin_port = htons(PORTA);
servidorsock.sin_addr.s_addr = htonl(INADDR_ANY);
//faz o bind do socket com a porta
if( bind(s , (struct sockaddr*)&servidorsock, sizeof(servidorsock) ) == -1){
terminar("bind");
}
//espera por dados
while(strcmp(buf,"fim\n")!=0){
printf("Esperando por dados\n");
fflush(stdout);
memset(buf,'%pre%',BUFFTAM);
//tenta receber algum dado do cliente
if (recvfrom(s, buf, BUFFTAM, 0, (struct sockaddr *) &cliente, (socklen_t*)&slen) == -1){
terminar("recvfrom()");
}
//imprime os dados recebidos
printf("Origem do cliente %s:%d\n", inet_ntoa(cliente.sin_addr), ntohs(cliente.sin_port));
printf("mensagem: %s\n" , buf);
printf("Digite a mensagem que deseja enviar ao cliente : ");
fgets(buf,BUFFTAM,stdin);
//retorna o cliente com a mensagem
if (sendto(s, buf, strlen(buf), 0, (struct sockaddr*) &cliente, slen) == -1){
terminar("sendto()");
}
}
}
int main()
{
IniciarServer();
return 0;
}
', BUFFTAM);
printf("pacote enviado com sucesso!");
//tenta receber dados do servidor
if (recvfrom(s, buf, BUFFTAM, 0, (struct sockaddr *) &servidorsock, (socklen_t *)&slen) == -1){
terminar("recvfrom()");
}
printf("pacote recebido com sucesso!");
//printa os dados recebidos
printf("%s\n",buf);
}
close(s);
}
int main()
{
IniciarCliente();
return 0;
}
',BUFFTAM);
//tenta receber algum dado do cliente
if (recvfrom(s, buf, BUFFTAM, 0, (struct sockaddr *) &cliente, (socklen_t*)&slen) == -1){
terminar("recvfrom()");
}
//imprime os dados recebidos
printf("Origem do cliente %s:%d\n", inet_ntoa(cliente.sin_addr), ntohs(cliente.sin_port));
printf("mensagem: %s\n" , buf);
printf("Digite a mensagem que deseja enviar ao cliente : ");
fgets(buf,BUFFTAM,stdin);
//retorna o cliente com a mensagem
if (sendto(s, buf, strlen(buf), 0, (struct sockaddr*) &cliente, slen) == -1){
terminar("sendto()");
}
}
}
int main()
{
IniciarServer();
return 0;
}
', BUFFTAM);
printf("pacote enviado com sucesso!");
//tenta receber dados do servidor
if (recvfrom(s, buf, BUFFTAM, 0, (struct sockaddr *) &servidorsock, (socklen_t *)&slen) == -1){
terminar("recvfrom()");
}
printf("pacote recebido com sucesso!");
//printa os dados recebidos
printf("%s\n",buf);
}
close(s);
}
int main()
{
IniciarCliente();
return 0;
}
server code
%pre%I do not know exactly what it is, I've reviewed this code from top to bottom, but still can not find what's wrong with it, if anyone can help me, I'd appreciate it.