QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 921|回复: 1

帮我看看这个web sever 小程序

[复制链接]
发表于 2005-11-28 20:49:04 | 显示全部楼层 |阅读模式
[code:1]#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>

#define CR '\r'
#define LF '\n'

#define PORT  6001
#define MAX  4096
        
int http_get ;
#if  0
char * GetLine(int fd)
{
        char netread[MAX], readch;
        ssize_t n;
        int len;
        
        len=0;
        netread[0]=CR;
        netread[1]=LF;
        
        while(len<MAX) {
                n=read(fd,&readch, 1);
                if(n<=0 ) break;
               
                netread[len++] =readch;
                if (readch ==LF ) break;
         
        }
        netread[len]='\0';
        return netread;
}
#endif
int HandleMsgs(char*s)
{
        if (s[0] ==CR  && s[1]==LF )    return -1;
        else  if (strncmp(s,"GET",3) ==0)
                http_get=1;
        return 0;

}


int main(int argc, char *argv[])
{
        int sockfd;
        int client_sockfd, len, r;
        char msg[MAX];
        struct sockaddr_in  sever_addr;
        struct sockaddr_in  client_addr;
        
   sockfd=socket(AF_INET, SOCK_STREAM,0);
        if(sockfd ==-1)
        {
                perror(NULL);
                exit(1);
        }
        sever_addr.sin_family=AF_INET;
        sever_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        sever_addr.sin_port =htons(PORT);
        
        if (bind (sockfd,(sockaddr*)&sever_addr, sizeof(struct sockaddr_in) )<0 )
        {
                perror(NULL);
                exit(1);               
        }
        while(1)
        {
                listen(sockfd, 25);
                len=sizeof(struct sockaddr_in);
                client_sockfd= accept(sockfd, (sockaddr*)&client_addr,(socklen_t*)&len);
                if (client_sockfd ==-1) {
                perror(NULL);
                exit(1);
                }
                r=0;
                http_get=0;
                while(r!=-1)
                {
                        char netread[MAX], readch;
                        ssize_t n;
                        int len;
        
                        len=0;
                        netread[0]=CR;
                        netread[1]=LF;
        
                        while(len<MAX) {
                                n=read(sockfd,&readch, 1);
                                if(n<=0 ) break;
                                
                                netread[len++] =readch;
                                if (readch ==LF ) break;
                          
                        }
        netread[len]='\0';

                        strcpy(msg, netread);
                //strcpy(msg, GetLine(client_sockfd) );
                        r=HandleMsgs(msg);
                        printf("%s\n",msg);
                }
                if (http_get ){
                        printf("[Response to client .]\n");
                        write(client_sockfd, "<HTML>\n",7);
                        write(client_sockfd, "<H3>HELLO!</H3>\n",16);
                        write(client_sockfd, "</HTML>\n\n",8);
                        write(client_sockfd, '\0',1);
               
                }
                 close(client_sockfd);
        }
运行此程序,

在浏览器窗口中 输入 http://127.0.0.1:6001  ,没反映,一直没出现应该出现的  HELLO  ,运行此程序的终端窗口也有反映,但什么都
没有出现,变成空白的,不知怎么回事?
[/code:1]
发表于 2006-2-28 14:27:32 | 显示全部楼层
n=read(sockfd,&readch, 1);
改为:
n=read(client_sockfd,&readch, 1);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 22:38 , Processed in 0.074168 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表