刚接触linux,参考了《深入理解计算机系统》中网络编程的内容,再ubuntu下用C实现了一个简单的web服务器----代码写得比较乱,还不是很熟悉socket编程,可能会有bug。
——
#include<unistd.h>
#include<sys/types.h>
#include<errno.h>
#include<string.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<sys/mman.h>
#define MAXLINE 8192
#define MAXLEN 8192
#define IP "127.0.0.1"
#define PORT 8080
#define WebRoot "/home/wjh/myweb"
typedef struct sockaddr SA;
typedef struct sockaddr_in SA_IN;
const int clientNumber=1024;
typedef struct
{
int rio_fd;
int rio_cnt;
char *rio_bufptr;
char rio_buf[MAXLEN];
} rio_t;
//Rio函数
ssize_t rio_readn(int fd,void *buf,size_t n);
ssize_t rio_writen(int fd,void *buf,size_t n);
void rio_readinitb(rio_t *rp,int fd);
ssize_t rio_readlineb(rio_t *rp,void *buf,size_t n);
ssize_t rio_readnb(rio_t *rp,void *buf,size_t n);
//返回错误信息
void showerror(int fd,char *cause,char*errnum,char *shortmsg,char *longmsg);
int main(int argc,char **argv)
{
int listenfd,fd,len;
SA_IN serveraddr,clientaddr;
//建立服务器端socket
if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0){
printf("Fail to create a server socket.\n");
exit(1);
}
//设置IP与PORT
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_addr.s_addr=inet_addr(IP);
serveraddr.sin_port=htons(PORT);
//绑定
if(