Hi,
I have got a client/server program from a socket programming tutorial on the net. When I am executing it as a localhost(client/server on same machine), its working fine but I am working on different machines, its not working. Can somebody plz guide me with this???
Cleint code is
Code:
//echo client
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#define BUFFSIZE 32
void Die (char *mess){perror (mess); exit(1);}
main(int argc, char *argv[ ]){
int sock;
struct sockaddr_in echoserver;
char buffer[BUFFSIZE];
unsigned int echolen;
int received=0;
if(argc!=4){
fprintf(stderr, "USAGE: TCPecho <server_ip> <word> <port>\n");
exit(1);
}
if((sock= socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
Die ("Failed to create socket");
}
memset(&echoserver, 0, sizeof(echoserver));
echoserver.sin_family = AF_INET;
echoserver.sin_addr.s_addr = inet_addr(argv[1]);
echoserver.sin_port=htons(atoi(argv[3]));
if(connect(sock, (struct sockaddr * ) &echoserver, sizeof (echoserver)) <0) {
Die("Failed to connect with server");
}
/* send the word to server */
echolen= strlen(argv[2]);
if(send(sock, argv[2], echolen, 0) != echolen) {
Die("Mismatch in number of sent bytes");
}
/* Receive the word back from the server */
fprintf(stdout , "Received");
while(received < echolen) {
int bytes =0;
if((bytes= recv(sock, buffer, BUFFSIZE-1, 0)) < 1) {
Die("Failed to receive bytes from server");
}
received += bytes;
buffer[bytes]='\0';
fprintf(stdout, buffer);
}
fprintf(stdout, "\n");
close (sock);
exit(0);
}
and server code is:
Code:
//echo server
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#define BUFFSIZE 32
#define MAXPENDING 5
void Die (char *mess){
perror (mess);
exit(1);
}
void HandleClient(int sock) {
char buffer[BUFFSIZE];
int received = -1;
if((received=recv(sock, buffer, BUFFSIZE, 0)) < 0) {
Die("Failed to receive message ");
}
while (received > 0) {
if (send (sock, buffer, received, 0) != received) {
Die("Failed to send bytes to Client");
}
if((received = recv(sock, buffer, BUFFSIZE, 0)) < 0) {
Die("Failed to receive additional bytes from client");
}
}
close(sock);
}
main(int argc, char *argv[ ]){
int serversock, clientsock;
struct sockaddr_in echoserver, echoclient;
if(argc !=2) {
fprintf(stderr, "USAGE: echoserver <port>\n");
exit(1);
}
if((serversock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
Die("Failed to create socket");
}
memset(&echoserver, 0, sizeof(echoserver));
echoserver.sin_family = AF_INET;
echoserver.sin_addr.s_addr = htonl (INADDR_ANY);
echoserver.sin_port=htons(atoi(argv[1]));
if(bind(serversock, (struct sockaddr *) &echoserver, sizeof(echoserver)) < 0) {
Die("Failed to bind the server socket");
}
if(listen(serversock, MAXPENDING) < 0) {
Die("Failed to listen on server socket");
}
while(1) {
unsigned int clientlen= sizeof(echoclient);
if((clientsock=accept(serversock, (struct sockaddr *) &echoclient, &clientlen)) < 0) {
Die ("Failed to accept client connection");
}
fprintf(stdout, "Client connected: %s\n", inet_ntoa(echoclient.sin_addr));
HandleClient(clientsock);
}
}
On same machines, works well with both localhost address and IP address of machine:
(server execution)
$./sock2serv 2000
Client connected: 172.16.21.70
Received from client:babar
(client execution)
$./sock2cli 172.16.21.70 babar 2000
received babar
$
Somebody plz guide with this problem. I am getting :
Code:
Failed to connect with server: No route to host
However if I am doing the ping from the remote machine, its working. Kindly help me with this.
Zulfi.