Запуск клиента и сервера UDP на разных машинах

У меня есть клиент UDP, а сервер работает нормально, когда он запускается на одном компьютере. (Здесь для клиента я дал 127.0.0.1 в качестве IP-адреса назначения для клиента UDP).

Однако при запуске на разных машинах и замене 127.0.0.1 моим ip-машиной, на которой присутствует server.c, программа не работает. Проблема в том, что я не получаю сообщение об ошибке.

Ниже приведен код для сервера и клиента. Скажите, пожалуйста, какие-либо изменения, которые необходимо выполнить для запуска на разных компьютерах (я использую ОС LINUX).

Примечание. Мои машины serverIP (машина, на которой присутствует server.c): 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); } 

Выше код работает нормально, когда он запускается в одной и той же системе. Скажите, пожалуйста, какие изменения необходимо выполнить для запуска вышеуказанного кода на разных машинах. Заранее спасибо.

Вы пытались изменить char *arg="127.0.0.1"; к IP-адресу серверов? IP-адрес 10.60.5.945 указанный в вашем вопросе, не является допустимым IP-адресом.

Еще лучше было бы взять IP (или даже имя хоста, которое вы разрешите) из argv [1].

пс. Вы можете видеть действительные IPv4-адреса вашего Linux-сервера, набрав: ip -4 al scope global