首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个C程序有关问题`请各位帮小弟我看下 100分送上`

2012-02-05 
一个C程序问题``请各位帮我看下100分送上`````````````在线等这是socket服务端server.c的代码怎样让里面pr

一个C程序问题``请各位帮我看下 100分送上`````````````在线等
这是socket服务端server.c的代码
怎样让里面printf的内容显示到客户端而不是服务端

#include   <stdio.h>
#include   <sys   pes.h>
#include   <sys/socket.h>
#include   <netinet/in.h>
#define   PORT   1234

char   login[]   =   "login.txt ";
char   coursesInfo[]   =   "courses.txt ";
char   materials[]   =   "materials.txt ";
char   marks[]   =   "marks.txt ";
char   id[6],cid[8],cname[8];
char   sid[8],mname[8],size[5];
char   buffer[256],name[255],password[255];
char   filenameToSave[255];
bool   isContinue=true;
void   displayFile(char   *fileName,   char   name[])
{
FILE   *   in;


in   =   fopen(fileName,   "r ");
do{
                fscanf   (in,   "%s%s%s ",id,cid,cname);
                if   (strcmp   (name,   id)   ==   0)
                {
                                printf( "%s\t%s\t%s\n ",   id,cid,cname);
                }

}while(!(feof(in)));
fclose(in);
if(!sizeof(filenameToSave))
{
strcat(filenameToSave, "   ");
strcat(filenameToSave,filename);
}
else
strcpy(filenameToSave,filename);
}

void   displayMaterials(char   *fileName,   char   cid2[])
{
      FILE   *   in;
        char   *pline[100];
        int   select;
        unsigned   int   IndexMate=0;
        in   =   fopen(fileName,   "r ");
                do{
                                fscanf   (in,   "%s%s%s ",   sid,mname,size);
                                if   (strcmp   (cid2,   sid)   ==   0){
                                                pline[IndexMate]=(char   *)malloc(256);
                                                sprintf(pline[IndexMate], "%s\t%s\t%s ",sid,mname,size);
                                                printf( "%d:   %s\t%s\t%s\n ",IndexMate+1,sid,mname,size);
                                                IndexMate++;
                                }


                printf( "\n\n ");



                                scanf( "%d ",   &select);
                if   (select   ==   0){
                                                system( "cls ");
                                                break;
                                }

                else   if(select> 0&&select <=IndexMate){
                                printf( "Downloading   :   %s ",pline[select-1]);
                                printf( "   Successful!\n ");
                                system( "pause ");
                                system( "cls ");
                                break;
                }
                                else{
                                                printf( "Invalid   selection,please   try   again!\n ");
                                                continue;
                                }
      int   i;
                                for(   i=0;i <IndexMate-1;i++){
                                                free(pline[i]);
                                }

  }while(!(feof(in)));

  fclose(in);
if(!sizeof(filenameToSave))
{
strcat(filenameToSave, "   ");
strcat(filenameToSave,filename);
}
else
strcpy(filenameToSave,filename);


}
void   menu()
{
                printf( "\n\n ");
                                printf( "Welcome   to   SCD   system!\n ");
                                printf( "\n\n ");
                                printf( "You   can   select   following   options:\n ");


                printf( "1.   Course   Information\n ");
                printf( "2.   Course   Materials\n ");
                printf( "3.   Course   Result\n ");
                printf( "4.   Logout\n ");
}
void   Work(char*   buff)
{
                if   (strcmp(buff, "CLR ")   )
                {
                        printf( "Course   Information:\n ");
                        displayFile(coursesInfo,name);
                        printf( "\n ");
                }
                else   if   (strcmp(buff, "CMR "))
                {
                        char   cid2[8];
                                                printf( "Enter   course   id: ");
                                                scanf( "%s ",   cid2);
                        printf( "Course   Materials:\n ");
                        displayMaterials(materials,cid2);
                        printf( "\n ");
                }
                else   if   (strcmp(buff, "AMR "))
                {
                        printf( "Course   Result:\n ");
                        displayFile(marks,name);
                        printf( "\n ");
                }
                else   if(strcmp(buff, "L "))
                {
                          printf( "exit!\n ");
  strcpy(buffer, "exit   ");
  isContinue=false;
                }else{
                printf( "invalad   choice! ");
                }
}
void   error(char   *msg)
{
        perror(msg);
        exit(1);
}



int   main(int   argc,   char   *argv[])
{
          int   sockfd,   newsockfd,   portno,   clilen;

          struct   sockaddr_in   serv_addr,   cli_addr;


          int   n;
                  FILE   *   in;
          char   temp[256];
          sockfd   =   socket(AF_INET,   SOCK_STREAM,   0);
          if   (sockfd   <   0)
                error( "ERROR   opening   socket ");
          bzero((char   *)   &serv_addr,   sizeof(serv_addr));
          portno   =   atoi(PORT);
          serv_addr.sin_family   =   AF_INET;
          serv_addr.sin_addr.s_addr   =   INADDR_ANY;
          serv_addr.sin_port   =   htons(portno);
          if   (bind(sockfd,   (struct   sockaddr   *)   &serv_addr,
                            sizeof(serv_addr))   <   0)
                            error( "ERROR   on   binding ");
                  while(1)
                  {
                listen(sockfd,5);
                clilen   =   sizeof(cli_addr);
                newsockfd   =   accept(sockfd,
                                  (struct   sockaddr   *)   &cli_addr,
                                  &clilen);
                                if   (newsockfd   <   0)
                    error( "ERROR   on   accept ");
                                bzero(buffer,256);
                n   =   read(newsockfd,buffer,255);
                                if   (n   <   0)
                                                error( "ERROR   reading   from   socket ");
                                ///////////name

                in   =   fopen(login,   "r ");
                while   (fscanf(in,   "%s   %s ",   name,   password)!=EOF)


                {
                                if   (strcmp(buffer,   name))
                                {
                                n   =   write(newsockfd, "validname ",18);
                                if   (n   <   0)   error( "ERROR   writing   to   socket ");
                                else{
                                                bzero(buffer,256);
                                              n   =   read(newsockfd,buffer,255);
                                          if   (n   <   0)
                                            error( "ERROR   reading   from   socket ");
                                        else{
                                          if   (strcmp(buffer,   password)==0)
                                          {
                                          n   =   write(newsockfd, "validpassword ",18);
                                                if   (n   <   0)   error( "ERROR   writing   to   socket ");
                                                else{
while(isContinue)//   用户循环选择
{
                                                          menu();
                                                          bzero(buffer,256);
                                                          n   =   read(newsockfd,buffer,255);  
  strcpy(temp,buffer);


                                                          Work(temp);
}
strcpy(buffer,filenameToSave);
                                                          n   =   write(newsockfd,buffer,256);
                                                        }
                                            }
                                      else{
                                                printf( "name   wrong ");
                                              }
                                                }
                                      }
                                }
                                else
                                {
                                  printf( "name   wrong ");
                                }
                }
                fclose(in);

                  }
       
          return   0;
}


[解决办法]
怎样让里面printf的内容显示到客户端而不是服务端?

哥们,醒醒.我认为这不是不可能,但是超级复杂!
首先,printf是个系统函数,除非你重新实现,不然不可能.
如果重新实现,你也得把要打印的数据发送到client端再由client端处理.
[解决办法]
把要显示的数据发到客户端,
客户端接收到就显示
[解决办法]
客户端和服务器端定义一个接收协议,将所有printf函数全部改为发送函数,发送数据到客户端.客户端接收后显示.
[解决办法]


把printf 的内容已sprintf为字符串的格式发送到client端
在client在用printf显示
[解决办法]
没有什么不可以...

用重定向可以办到...偶好像在哪本书上看到过...

以上意见仅供参考...
------解决方案--------------------


taoyanqq() 和楼主都是我``呵呵```所以大家不要看错哈
======================================================
我还是运行错误```

socket 客户端错误提示:
?client.c:120: error: incompatible types in assignment
1client.c:121: error: incompatible type for
argument 1 of 鈥榝printf鈥
?client.c:122: error: incompatible type for argument 1 of 鈥榝close鈥

代码:(最后3行)strcpy(outputTofile, "logout_time: ");
time(&now);
strcat(outputTofile,(char*)now);

strcat(outputTofile,buffer);
file=fopen( "log.txt ", "w ");
fprintf(file, "%s ",buffer);
fclose(file);
}

怎么回事呀````````
[解决办法]
要说起来可能太复杂.小生只说个大概思路仅供楼主参考...

1.一般情况下我们的CMD窗口可使用的输入输出句柄为stdin,stderr,stdout,...其中前两者表示输入.后者表示输出.但它们的输入输出的目的地都是指CMD窗口.这里其实只要重定向CMD窗口的数据流不就行了么?重定向方法上面说过了.详细点就是下面这个样子:

PROCESS_INFOMATION Processinformation;
STARUPINF si;
si.hStdInput = hReadPipe2;
si.hStdOutput = si.hStdError = hWritePipe1;
CreateProcess(NULL, "cmd.exe /k ", NULL, NULL, 1, 0, NULL, NULL, &si, &ProcessInformation);

注意,上面的hReadPipe2,hWritePipe1是管道的句柄.管道是一种内存间通信机制.起到共享内存的作用.一个进程向管理写入数据后别一个进程就可以从管道的另一端读出来.这个很好理解.

其实就是把原来输入到CMD窗口的内容输出到管道里再送到另一端的屏幕上.把屏幕上的内容也输出到管理里返回给客户端...

管道创建函数CreatePipe可查MSDN...
ZeroMEmory(&si,sizeof(si));

热点排行