OK, here's a simple client/server example that requests a file.
client.c
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <strings.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#define DEFAULT_PROTOCOL 0
#define PORT 50000
#define MAXLINE 4096
int main(int argc, char**argv)
{
int clientfd, tot = 0, n = 0;
char recvline[MAXLINE];
struct sockaddr_in servaddr;
if ( argc != 3 )
{
fputs("usage error - a.out <IPaddress> <Filename>\n", stderr);
exit(EXIT_FAILURE);
}
if ((clientfd = socket(AF_INET, SOCK_STREAM, DEFAULT_PROTOCOL)) < 0)
{
perror("socket");
exit(EXIT_FAILURE);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
if ((inet_pton(AF_INET, argv[1], &servaddr.sin_addr.s_addr)) <= 0)
{
fputs("conversion error!\n", stderr);
exit(EXIT_FAILURE);
}
if ((connect(clientfd, (const struct sockaddr*)&servaddr, sizeof(servaddr))) < 0)
{
perror("connect");
exit(EXIT_FAILURE);
}
write(clientfd, argv[2], strlen(argv[2]));
shutdown(clientfd, SHUT_WR);
while ((n = read(clientfd, recvline, MAXLINE)) > 0)
{
recvline[n] = '\0';
tot += n;
fputs(recvline, stdout);
}
if ( n < 0 )
fputs("read error!\n", stderr);
fprintf(stdout, "client read %d bytes!\n", tot);
close(clientfd);
exit(EXIT_SUCCESS);
}
server.c
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <strings.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#define DEFAULT_PROTOCOL 0
#define PORT 50000
#define MAXLINE 4096
#define PATH_SIZE 128
int main(int argc, char**argv)
{
int listenfd, connfd, val = 1;
char recvline[MAXLINE];
struct sockaddr_in servaddr;
signal(SIGCHLD, SIG_IGN);
if ((listenfd = socket(AF_INET, SOCK_STREAM, DEFAULT_PROTOCOL)) < 0)
{
perror("socket");
exit(EXIT_FAILURE);
}
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
if ((bind(listenfd, (const struct sockaddr*)&servaddr, sizeof(servaddr))) < 0)
{
perror("bind");
exit(EXIT_FAILURE);
}
if ((listen(listenfd, 5)) < 0)
{
perror("listen"); …