C 客户端/服务器与 fprintf 通信?
Posted
技术标签:
【中文标题】C 客户端/服务器与 fprintf 通信?【英文标题】:C Client/Server Communicating with 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);
...
感谢先生,您很聪明。
【参考方案1】:
如何使用 dup 系统调用,所以将标准输出重定向到套接字描述符。所以我认为你可以使用 printf 将你的东西放入套接字中。
【讨论】:
【参考方案2】:在FILE
s 上工作的函数不太可能像你在套接字上工作时所期望的那样做,而且很可能会给你带来麻烦。如果你想实现格式化,我建议你滚动你自己的格式化函数来写入套接字:你需要做的就是创建一个可变参数函数,调用 vsprintf
格式化并将结果发送到 write
或send
...
【讨论】:
我看不出您在设想什么问题。一个主要问题是阻塞 IO。无法将stdio
与非阻塞模式一起使用;这将导致FILE
出现不可恢复的错误。因此,我建议不要将 stdio 与套接字一起使用,除非(1)您只有一个正在处理的连接并且没有异步事件,或者(2)您正在使用线程并且不在乎是否阻塞。
@R.我读到使用write/send
发送格式为vsprintf
的数据...不确定分歧在哪里:p以上是关于C 客户端/服务器与 fprintf 通信?的主要内容,如果未能解决你的问题,请参考以下文章
C/C++ 服务器,通过标准输入/标准输出与客户端通信(阻塞标准输入,直到读取了多个字节)
linux用java socket与c的socket通信乱码问题