LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 680|回复: 0

编码转换问题,急求方法

[复制链接]
发表于 2006-6-4 22:42:36 | 显示全部楼层 |阅读模式
我最近修改编写了一个proxy程序,主要负责客户机与服务器之间的HTTP数据转发,主体如下:

  1.     if((isosockfd=socket(AF_INET,SOCK_STREAM,0))<0)
  2.       errorout("failed to create socket to host\n");
  3.     connstat=connect(isosockfd,(struct sockaddr *)&hostaddr,sizeof(hostaddr));
  4.     switch(connstat)
  5.       {
  6.         case 0:
  7.                break;
  8.         case ETIMEDOUT:
  9.         case ECONNREFUSED:
  10.         case ENETUNREACH:
  11.                //strcpy(buf,sys_myerrlist[errno]);
  12.                strcat(buf,"\r\n");
  13.                write(usersockfd,buf,strlen(buf));
  14.                close(usersockfd);
  15.                exit(1);
  16.         default:
  17.                errorout("failed to connect to host\n");
  18.                break;
  19.       }
  20.       
  21.    
  22.     while(1)
  23.       {
  24.         FD_ZERO(&rdfdset);
  25.         FD_SET(usersockfd,&rdfdset);
  26.         FD_SET(isosockfd,&rdfdset);
  27.         
  28.         if(select(FD_SETSIZE,&rdfdset,NULL,NULL,NULL)<0)
  29.           errorout("select failed\n");
  30.         if(FD_ISSET(usersockfd,&rdfdset))
  31.           {
  32.             if((iolen=read(usersockfd,buf,sizeof(buf)))<=0)
  33.               break;
  34.             write(isosockfd,buf,iolen);            
  35.           }
  36.         if(FD_ISSET(isosockfd,&rdfdset))
  37.           {
  38.             if((iolen=read(isosockfd,buf,sizeof(buf)))<=0)
  39.               break;
  40.             edit_data(buf);/*********************/
  41.             printf("%s\n",buf);
  42.             write(usersockfd,buf,iolen);
  43.            }
  44.       }//end while
  45.     close(isosockfd);
  46.     close(usersockfd);
复制代码


     edit_data函数用来对buf中的数据进行过滤修改,也就是对服务器向客户机传送的HTML代码进行过滤,但是这样一来,客户机无法显示网页。如果屏蔽edit_data函数,只做转发,则一切正常。
     通过查找资料发现,HTML代码属于UNICODE,而我编写的edit_data函数中对buf[ ]定义为char类型,故造成数据在write时不完整。
     现在我不知道该如何在不破坏UNICODE代码的同时,还能对它进行修改,希望高手指点或者推荐相关资料以供学习。
    急求解决方法,这里先谢谢大家了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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