百度空间 | 百度首页 
 
查看文章
 
socket 1
2009-11-01 22:20
//start
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <sys/socket.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <netinet/in.h>
const int SIZE = 500;
static void sigCancle(int);
void usage();
void server(int );
int ser;
void init();
char buff[SIZE];
int flen=0;
int main(int argc,char ** argv){
if (argc!=2){
usage();
return 1;
}
if (signal(SIGINT,sigCancle)==SIG_ERR){
printf("signal Cancle error\n");
return 2;
}
init();
int port;
sscanf(argv[1],"%d",&port);
printf("start server at port: %d\n",port);
ser=-1;
server(port);
return 0;
}
void init(){
int fin;
if ((fin=open("index.html",O_RDONLY))<0){
printf("read file error\n");
exit(4);
}
struct stat sta ;
if (fstat(fin,&sta)<0){
printf("read file stat error\n");
exit(5);
}
flen = sta.st_size;
//printf("file size: %d\n",flen);   
void *src = mmap(0,flen,PROT_READ,MAP_SHARED,fin,0);
if (src==MAP_FAILED){
printf("memery maping error\n");
exit(6);
}
memcpy(buff,src,flen);
buff[flen]='\0';
//printf("%s\n",buff);
munmap(src,flen);
}
void server(int port){
if ((ser=socket(AF_INET,SOCK_STREAM,0))<0){
printf("server create error\n");
exit(3);
}
struct sockaddr_in addr;
int addr_len = sizeof(struct sockaddr);
bzero(&addr,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
if (bind(ser,(struct sockaddr *)&addr,sizeof(addr))<0){
printf("bind error\n");
exit(7);
}
if (listen(ser,SOMAXCONN)<0){
printf("error when listen\n");
exit(8);
}
while (true){
int client = accept(ser,NULL,NULL);
if (client<0){
printf("connect close\n");
break;
}else{
char msg[SIZE];
int len=recv(client,msg,SIZE,0);
msg[len]=0;
printf("recv:\n%s\n",msg);
send(client,buff,flen,0);
close(client);
}

}
}
void usage(){
printf("usage: ./prob.o [port]");
}
static void sigCancle(int signo){
if (signo==SIGINT){   
printf("server closed\n");
close(ser);
}
}
//end

类别:linux&unix | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu