【问题标题】:C Client/Server Communicating with fprintf?C 客户端/服务器与 fprintf 通信?
【发布时间】:2011-09-11 21:35:20
【问题描述】:

如何让服务器能够使用 printf 或 fprintf 而不是使用 write 系统调用向客户端发送消息?

我的服务器已经制作完成并且正在运行,通过 write 发送消息,但我更愿意使用 fprintf。

例如这不起作用:

newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, &clilen);
FILE *fp = fdopen(newsockfd, "w");
fprintf(fp, "test"); 
fflush(fp);

我知道有一个新问题。当我只有上面的代码时,它可以工作并且我可以在我的浏览器中看到它,但是如果我添加 read(newsockfd,buffer,255) 之后,我将不再看到发布在我的客户端中的消息。

【问题讨论】:

  • 我认为您只是缺少fflush(fp);...
  • 感谢先生,您很聪明。

标签: c sockets client printf


【解决方案1】:

如何使用 dup 系统调用,所以将标准输出重定向到套接字描述符。所以我认为你可以使用 printf 将你的东西放入套接字中。

【讨论】:

    【解决方案2】:

    在FILEs 上工作的函数不太可能像你在套接字上工作时所期望的那样做,而且很可能会给你带来麻烦。如果你想实现格式化,我建议你滚动你自己的格式化函数来写入套接字:你需要做的就是创建一个可变参数函数,调用 vsprintf 格式化并将结果发送到 write或send...

    【讨论】:

    • 我看不出您在设想什么问题。一个主要问题是阻塞 IO。无法将stdio 与非阻塞模式一起使用;这将导致FILE 出现不可恢复的错误。因此,我建议不要将 stdio 与套接字一起使用,除非(1)您只有一个正在处理的连接并且没有异步事件,或者(2)您正在使用线程并且不在乎是否阻塞。
    • @R.我读到使用write/send 发送格式为vsprintf 的数据...不确定分歧在哪里:p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2011-08-18
    相关资源
    最近更新 更多