- #include <string.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <NETINET/in.h>
- #include <ERRNO.H>
- #include <PTHREAD.H>
- #define MYPORT 8080
- #define STRLEN 1024
- void *Recv(void * arg1)
- {
- int i,ret;
- int outp=0;
- int outfd=*(int *)arg1;
- char buf[STRLEN];
- while(1)
- {
- memset(buf,0,STRLEN);
- ret=recv(outfd,buf,STRLEN,0);
- if(ret>0){
- buf[ret]='/0';
- printf("server:recv buf=[%s]/n",buf);
- }else if(ret<0){
- printf("server:recv ret=[%d],errno=[%d]/n",ret,errno);
- break;
- }
- memset(buf,0,STRLEN);
- sprintf(buf,"HTTP/1.1 200 OK/r/nContent-Length: 2/r/nContent-Type: text/html;charset=gb2312/r/n/r/nok");
- ret=send(outfd,buf,strlen(buf),0);
- if(ret>0){
- printf("server:listend ret=[%d],buf=[%s]/n",ret,buf);
- }
- if(ret<0){
- printf("server:listend ret=[%d],errno=[%d]/n",ret,errno);
- break;
- }
- close(outfd);
- }
- }
- int main()
- {
- int sockefd,listend;
- int ret,i,addrlen;
- struct sockaddr_in my_addr;
- char buf[STRLEN];
- pthread_t thid;
- sockefd=socket(AF_INET,SOCK_STREAM,0);
- my_addr.sin_family=AF_INET;
- my_addr.sin_port=htons(MYPORT);
- my_addr.sin_addr.s_addr=inet_addr("192.168.0.102");
- bzero(&my_addr.sin_zero,8);
- ret=bind(sockefd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr_in));
- if(ret<0){
- printf("server:bind ret=[%d],errno=[%d]/n",ret,errno);
- return -1;
- }
- ret=listen(sockefd,5);
- if(ret<0){
- printf("server:listen ret=[%d]/n",ret);
- return -1;
- }
- while(1){
- addrlen=sizeof(struct sockaddr_in);
- listend=accept(sockefd,(struct sockaddr *)&my_addr,&addrlen);
- if(listend==-1){
- printf("server:accept listend=[%d],errno=[%d]/n",listend,errno);
- return listend;
- }else{
- if(pthread_create(&thid,NULL,Recv,&listend)<0){
- printf("create the %dth thread fail/n",i);
- return -1;
- }
pthread_join(thid);
- }
- }
- printf("server:exit/n");
- return 0;
- }