I'm trying to run client server connection. Here's my code:
server.c
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#define MAX_BUFFER 128
#define DAYTIME_SERVER_PORT 13
/.../ int main(void) { int serverFd, connectionFd; struct sockaddr_in servaddr; char timebuffer[MAX_BUFFER+1]; time_t currenTime;
serverFd = socket(AF_INET, SOCK_STREAM, 0);
memset(&servaddr, 0 , sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(DAYTIME_SERVER_PORT);
bind(serverFd, (struct sockaddr *) &servaddr, sizeof(servaddr));
listen(serverFd, 5);
while(1)
{
connectionFd = accept(serverFd, (struct sockaddr *) NULL, NULL);
if(connectionFd >= 0)
{
currenTime = time(NULL);
snprintf(timebuffer, MAX_BUFFER, "%s\n", ctime(¤Time));
write(connectionFd, timebuffer, strlen(timebuffer));
close(connectionFd);
}
}
}
client.c
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#define MAX_BUFFER 128
#define DAYTIME_SERVER_PORT 13
int main()
{
int connectionFd, in;
struct sockaddr_in servaddr;
char timebuffer[MAX_BUFFER+1];
connectionFd = socket(AF_INET,SOCK_STREAM,0);
memset(&servaddr,0 ,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(DAYTIME_SERVER_PORT);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(connectionFd,(struct sockaddr_in *) &servaddr , sizeof(servaddr));
while((in = read(connectionFd, timebuffer, MAX_BUFFER)) >0)
{
timebuffer[in] = 0;
printf("\n%s" , timebuffer);
}
/*...*/
close(connectionFd);
}
How to modify server to listen on loopback interface (not other interface)?
Change
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
to just use the loop back address. i.e.
servaddr.sin_addr.s_addr = htonl(2130706433L)
(used http://www.smartconversion.com/unit_conversion/IP_Address_Converter.aspx to do the maths)