Exécution du client et du serveur UDP sur différentes machines

J’ai un client UDP et un serveur fonctionnant correctement lorsqu’ils sont exécutés sur le même ordinateur. (Ici, pour le client, j’ai donné 127.0.0.1 comme adresse IP de destination sur le client UDP).

Cependant, lorsqu’il est exécuté sur différentes machines et que le remplacement de 127.0.0.1 par my est l’IP de la machine où server.c est présent, le programme ne fonctionne pas. Le problème est que je ne reçois aucun message d’erreur.

Vous trouverez ci-dessous le code du serveur et du client. Dites-moi s’il vous plaît toutes les modifications à effectuer pour exécuter le même sur différentes machines (j’utilise LINUX OS).

Remarque: Mes machines serverIP (machine où server.c est présent): 10.60.5.945 , clientIP: 10.60.5.950.

server.c:

#include #include #include #include #include #include #include #include int main() { int cont,create_socket,new_socket,addrlen,fd; int bufsize = 1024; int nameLen=0; int client_address_size=0; char *buffer = malloc(10); char fname[256]; struct sockaddr_in address,client; if ((create_socket = socket(AF_INET,SOCK_DGRAM,0)) > 0) printf("The socket was created\n"); address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(15000); if (bind(create_socket,(struct sockaddr *)&address,sizeof(address))== 0) printf("Binding Socket\n"); nameLen=sizeof(address); if (getsockname(create_socket,(struct sockaddr *)&address,&nameLen)<0) { printf("\n\ngetsockname() error\n"); exit(3); } printf("Port assigned is %d\n", ntohs(address.sin_port)); client_address_size=sizeof(client); if(recvfrom(create_socket,fname, 255,0,(struct sockaddr *) &client,&client_address_size)<0) { printf("\n\nrecvfrom() failed\n"); exit(4); } printf("A request for filename %s Received..\n", fname); if ((fd=open(fname, O_RDONLY))0) { sleep(1); sendto(create_socket,buffer,cont,0,(struct sockaddr *) &client,client_address_size); printf("\n\nPacket sent\n"); } sendto(create_socket,"*",1,0,(struct sockaddr *) &client,client_address_size); printf("Request Completed\n"); return close(create_socket); } 

client.c:

 #include #include #include #include #include #include int main() { int create_socket,cont,res; char *arg="127.0.0.1"; int bufsize = 1024; int server_address_size=0; char *buffer = malloc(10); char fname[256]; struct sockaddr_in address; int serv_addr_size = sizeof(address); if ((create_socket = socket(AF_INET,SOCK_DGRAM,0)) > 0) printf("The Socket was created\n"); address.sin_family = AF_INET; address.sin_port = htons(15000); address.sin_addr.s_addr=inet_addr(arg); if (connect(create_socket,(struct sockaddr *) &address,sizeof(address)) == 0) printf("The connection was accepted with the server %s...\n",arg); printf("Enter The Filename to Request : "); scanf("%s",fname); res=sendto(create_socket, fname, sizeof(fname), 0,(struct sockaddr *) &address,sizeof(address)); if(res0) { if(buffer[cont-1]=='*') break; write(1, buffer, cont); } printf("\nEOF\n"); return close(create_socket); } 

Ci-dessus, le code fonctionne bien lorsqu’il est exécuté sur le même système. Dites-moi s’il vous plaît les modifications à apporter pour exécuter le code ci-dessus sur différentes machines. Merci d’avance.

Avez-vous essayé de changer char *arg="127.0.0.1"; à l’adresse IP des serveurs? L’adresse IP 10.60.5.945 mentionnée dans votre question n’est pas une adresse IP valide.

Encore mieux serait de prendre l’adresse IP (ou même un nom d’hôte que vous résolvez) de argv [1].

ps. Vous pouvez voir les adresses IPv4 valides de votre machine Linux en tapant: ip -4 al scope global