c - internet socket on the same host -
i'm trying make internet socket client , server run on same host, i'm getting connection error timed out connection client side, i'm doing on ubuntu virtual machine here's code:
server
#include <stdlib.h> /* getenv */ #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> /* internet domain header */ #include <strings.h> #define server_port 59154 struct sockaddr_in self = {af_inet}; int main() { int soc, ns, k; char buf[256]; struct sockaddr_in peer = {af_inet}; int peer_len = sizeof(peer); char *host; /* set listening socket soc */ soc = socket(af_inet, sock_stream, 0); if (soc < 0) { perror("server:socket"); exit(1); } bzero(&self, sizeof(self)); self.sin_family = af_inet; self.sin_addr.s_addr = htonl(inaddr_any); self.sin_port = htons(server_port); if (bind(soc, (struct sockaddr *)&self, sizeof(self)) == -1) { perror("server:bind"); close(soc); exit(1); } listen(soc, 1); /* accept connection request */ ns = accept(soc, (struct sockaddr *)&peer, &peer_len); if (ns < 0) { perror("server:accept"); close(soc); exit(1); } /* data transfer on connected socket ns */ k = read(ns, buf, sizeof(buf)); host = getenv("host"); printf("server on %s received: %s\n”, host, buf); write(ns, buf, k); close(ns); close(soc); return(0); }
and client:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> /* internet domain header */ #include <netdb.h> #include <strings.h> #define server_port 59154 struct sockaddr_in peer = {af_inet}; int main(int argc, char* argv[]) { int soc; char buf[256]; struct hostent *hp; if ( argc != 2 ) { fprintf(stderr, "usage: %s hostname\n", argv[0]); exit(1); } /* fill in peer address */ hp = gethostbyname(argv[1]); if ( hp == null ) { fprintf(stderr, "%s: %s unknow host\n", argv[0], argv[1]); exit(1); } bzero(&peer, sizeof(peer)); peer.sin_family = af_inet; peer.sin_addr.s_addr = htonl(inaddr_any); peer.sin_port = htons(server_port); bcopy(hp->h_addr_list[0], (char*)&peer.sin_addr, hp->h_length); /* create socket */ soc = socket(af_inet, sock_stream, 0); /* request connection server */ if (connect(soc, (struct sockaddr *)&peer, sizeof(peer)) == -1) { perror("client:connect"); close(soc); exit(1); } write(soc, "hello internet", 15); read(soc, buf, sizeof(buf)); printf("server echoed: %s\n", buf); close(soc); return(0); }
Comments
Post a Comment