当前位置:  技术问答>linux和unix

网络编程的小问题!

    来源: 互联网  发布时间:2016-03-13

    本文导语:  我的客户端程序向网络写数据函数是这样的: 我想在红颜色语句处将stdin(标准输入流)改为一个文件指针,使文件指针指向的文件内容能被发送出去,这样能行吗? 该如何修改?    赐教啊! #include "common.h" /* Read from the...

我的客户端程序向网络写数据函数是这样的:
我想在红颜色语句处将stdin(标准输入流)改为一个文件指针,使文件指针指向的文件内容能被发送出去,这样能行吗?
该如何修改?    赐教啊!
#include "common.h"

/* Read from the keyboard and write to the server
   Read from the server and write to the keyboard

   we use select() to multiplex
*/
void read_write(ssl,sock)
  SSL *ssl;
  {
    int width;
    int r,c2sl=0,c2s_offset=0;
    fd_set readfds,writefds;
    int shutdown_wait=0;
    char c2s[BUFSIZZ],s2c[BUFSIZZ];
    int ofcmode;
    
    /*First we make the socket nonblocking*/
    ofcmode=fcntl(sock,F_GETFL,0);
    ofcmode|=O_NDELAY;
    if(fcntl(sock,F_SETFL,ofcmode))
      err_exit("Couldn't make socket nonblocking");
    

    width=sock+1;
    
    while(1){
      FD_ZERO(&readfds);
      FD_ZERO(&writefds);

      FD_SET(sock,&readfds);

      /*If we've still got data to write then don't try to read*/
      if(c2sl)
        FD_SET(sock,&writefds);
      else
        FD_SET(fileno(stdin),&readfds);

      r=select(width,&readfds,&writefds,0,0);
      if(r==0)
        continue;

      /* Now check if there's data to read */
      if(FD_ISSET(sock,&readfds)){
        do {
          r=SSL_read(ssl,s2c,BUFSIZZ);
          
          switch(SSL_get_error(ssl,r)){
            case SSL_ERROR_NONE:
              fwrite(s2c,1,r,stdout);
              break;
            case SSL_ERROR_ZERO_RETURN:
              /* End of data */
              if(!shutdown_wait)
                SSL_shutdown(ssl);
              goto end;
              break;
            case SSL_ERROR_WANT_READ:
              break;
            default:
              berr_exit("SSL read problem");
          }
        } while (SSL_pending(ssl));
      }
      
      /* Check for input on the console*/
      if(FD_ISSET(fileno(stdin),&readfds)){
        c2sl=read(fileno(stdin),c2s,BUFSIZZ);
        if(c2sl==0){
          shutdown_wait=1;
          if(SSL_shutdown(ssl))
            return;
        }
        c2s_offset=0;
      }

      /* If we've got data to write then try to write it*/
      if(c2sl && FD_ISSET(sock,&writefds)){
        r=SSL_write(ssl,c2s+c2s_offset,c2sl);

        switch(SSL_get_error(ssl,r)){
          /* We wrote something*/
          case SSL_ERROR_NONE:
            c2sl-=r;
            c2s_offset+=r;
            break;
            
            /* We would have blocked */
          case SSL_ERROR_WANT_WRITE:
            break;

            /* Some other error */
          default:       
            berr_exit("SSL write problem");
        }
      }

      
    }
  end:
    SSL_free(ssl);
    close(sock);
    return;
  }


|
直接要open,fd得了,用不着FILE *了...

|
ssl的不熟,但应该不对吧,只是指向文件,没有去读,是不会发送的

|
SendStream并不是传送一个流对象,而是把流中的数据读出来传送过去。你在接收时应根据实际情况决定使用ReceiveBuf(一般情况)或ReceiveText(如果是文本)接收。   
  事实上SendStream方法相当于:   
  char   *   Buf;   
  int   BufLen;   
  BufLen   =   AStream->Size();   
  Buf   =   new   char   [BufLen];   
  AStream   ->   Position   =   0;   
  AStream   ->   Read(Buf,BufLen);   
  ClientSocket1->Socket->SendBuf(Buf,BufLen);   
  delete   []Buf;   
  delete   AStream;//注意这句,你的流将被SendBuf释放,你不要再去释放它。

|


stdin和文件流是没有区别的。

|
你可以先读到一个临时buffer再发送,我猜文件指针只是指向文件资源的一个句柄而不是指向它的内容,它内部应该有全局变量保存了文件偏移指针.所以,你这样都能发送数据出去,那还要fread之类的函数干什么.具体可以在网上找找文件流的实现原理.

|
lz要干嘛?

    
 
 

您可能感兴趣的文章:

  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • 用java做网络编程和用c做网络编程有啥区别
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 《UNIX网络编程》这本书适合linux下的网络编程吗?
  • 嵌入式网络编程与非嵌入式网络编程有什么不同
  • 读过 Unix网络编程 或者 熟知Unix网络编程的 的进来看一下
  • 菜鸟问题:请问要在Linux操作系统下完成TCP/IP网络编程,用什么编程工具好?
  • UNIX网络编程卷1
  • 关于文件操作和Socket网络编程!
  • 求助:linux/unix网络编程
  • 谁知道哪有《Unix网络编程》w.richard stevens 著的下载?
  • 新手请教,linux网络编程。
  • linux环境进行网络编程的教材
  • linux下网络编程环境配置问题
  • 高分求网络编程方面的书籍
  • 求助linux下的网络编程问题
  • java的网络编程
  • Unix/Linux网络编程怎样来做一个项目?
  • 请推荐几本Linux/Unix网络编程的好书吧
  • 求介绍linux下的网络编程书
  • 请有经验的朋友推荐一下Linux/Nnix下网络编程方面的书,急需学习
  • socket网络编程中出现Illegal seek问题 iis7站长之家
  • socket网络编程中出现Illegal seek问题
  • 关于Linux下网络编程的问题
  • linux 网络编程的问题
  • Linux 下网络编程的一个问题
  • 网络编程基础问题
  • unix下网络编程如何解决粘包问题
  • linux下网络编程的若干问题!
  • uclibc的网络编程函数getifaddrs的问题
  • <UNIX网络编程>27章的问题,请高手来帮我!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问unix网络编程和linux网络有什么区别
  • 网络编程中“多宿”是什么意思
  • 我的专业是网络技术,对TCP/IP有一定的了解但不精,想要学习linux下的网络编程,请大家推荐学习方法和优秀的书籍
  • 会Linux下网络编程,能找到什么样的工作,从事什么?
  • Unix/Linux网络编程可以用来做什么?一般从事什么样的职业?
  • Java 网络编程有些什么内容?
  • 帮推荐一本linux 网络编程的经典书吧
  • 求关于UNIX网络编程的好书 最好带项目的那种
  • 哪里可以免费下载Linux下C网络编程方面的好书?
  • 怎样学习JAVA网络编程?
  • 有关网络编程
  • 学UNIX网络编程,看哪些书好?大家各抒已见~
  • 我想学习linux下的网络编程。
  • “精通网络编程,透彻了解TCP/IP等网络协议”--请高人诠释这句话的意思
  • Linux下网络编程入门书籍推荐
  • 我是来学习linux的,网络编程高手请进
  • 开始工作关于linux网络编程的工作,求大神推荐点这方面书籍
  • 学习linux网络编程需要学习些内核知识吗?
  • 我想学c/s模式的linux网络编程,那位同志可以推荐一下几个成功例子呢?谢谢!
  • 异步网络编程框架 itachi


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3