Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <fcntl.h>
#include "url_codec.h"
#define BACKLOG SOMAXCONN
#define BUFSIZE 1024
int serveClient(void);
int sendAll(int socket, const void *buffer,int len,int flags);
int main(void)
{
char buffer[BUFSIZE];
int socketFd;
int newSocketFd;
int port=7000;
int res,reuseAddr;
//FILE *stream;
int stream;
struct sockaddr_in server = {0};
struct sockaddr_in client = {0};
struct hostent *rem;
socklen_t clientLength;
//Create socket
socketFd = socket(PF_INET,SOCK_STREAM,0);
if (socketFd == -1)
{
fprintf(stderr,"Error creating socket : ");
perror("");
return -1;
}
//Prepare options of socket
server.sin_family = PF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(port);
reuseAddr = 1;
setsockopt(socketFd,SOL_SOCKET,SO_REUSEADDR,&reuseAddr,sizeof(int));
//Binding the above socket
res = bind(socketFd,(struct sockaddr *)&server,sizeof(struct sockaddr_in));
if(res < 0)
{
fprintf(stderr,"Error binding socket : ");
perror("");
close(socketFd);
return -1;
}
//Listening for connections
res = listen(socketFd,BACKLOG);
if(res < 0)
{
fprintf(stderr,"Error listening socket : ");
perror("");
close(socketFd);
return -1;
}
printf("Server ready to accept clients\n");
clientLength = sizeof(struct sockaddr_in);
newSocketFd = accept(socketFd, (struct sockaddr *)&client, &clientLength);
if(newSocketFd < 0)
{
fprintf(stderr,"Fail to accept connection : ");
perror("");
}
printf("Connection established\n");
strcpy(buffer,"\0");
while(strstr(buffer,"\r\n\r\n") == NULL)
{
recv(newSocketFd,buffer,5,0);
printf("%s",buffer);
}
strcpy(buffer,"\0");
strcpy(buffer,"HTTP/1.0 200 OK\r\n"); puts(buffer);
sendAll(newSocketFd,buffer,strlen(buffer),0);
strcpy(buffer,"Sever: musicstreamer v1.0\r\n"); puts(buffer);
sendAll(newSocketFd,buffer,strlen(buffer),0);
strcpy(buffer,"Connection: close\r\n"); puts(buffer);
sendAll(newSocketFd,buffer,strlen(buffer),0);
strcpy(buffer,"Content-Type: audio/mpeg\r\n\r\n"); puts(buffer);
sendAll(newSocketFd,buffer,strlen(buffer),0);
stream = open("test.mp3",O_RDONLY);
if(stream < 0) perror("");
while(read(stream,buffer,1) > 0)
{
sendAll(newSocketFd,buffer,1,0);
}
close(stream);
close(newSocketFd);
close(socketFd);
return 0;
}
int sendAll(int socket, const void *buffer,int len,int flags)
{
int bytesSent=0;
bytesSent += send(socket,buffer,len,flags);
while(bytesSent < len)
{
bytesSent += send(socket,buffer+bytesSent,len-bytesSent,flags);
}
return 1;
}
I'll fix byte rate later thanks Cactus Hugger