[问题] server socket 缓冲 相关问题

楼主: applejuice64 (凝时)   2020-08-19 15:58:20
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
pthread?
问题(Question):
目前用char buffer[200];来储存
我的server会在main function
1.开一个pthread处理socket
2.进入while循环利用scanf主动send讯息
而pthread则是会
1.read从client寄来的讯息
2.printf从client来的讯息
3.一读到讯息就会send回传讯息给client
4.重复以上步骤...
假设我一气呵成输入pizza回车
client就会收到pizza讯息
但是我慢慢输入piz时
被client打断
这时缓冲区似乎没被清空(piz)
继续输入za的话client就会得到pizza讯息
想问在这个状况下能否先将buffer区的piz读出来
让pthread在不妨碍main的情况下
输出client的message之后
把piz读出来
main可以继续输入za来完成pizza这个单字?
作者: Killercat (杀人猫™)   2020-08-19 16:08:00
你用什么当buffer?用istream的话有现成的istream::peek
楼主: applejuice64 (凝时)   2020-08-19 16:19:00
目前只用c,char buff[200]
作者: Killercat (杀人猫™)   2020-08-19 16:20:00
er... char array的话要不要清缓冲区不是你自己控制的?
作者: Davinais (水灵流喵)   2020-08-20 07:22:00
取消掉缓冲区直接读进 buf ,然后每次有接到讯息到时候再把 buf 印出来应该也可以,不过这样要自己处理倒退删除跟 enter 那些字符
作者: longlongint (华哥尔)   2020-08-20 23:40:00
你讲的行为有点像ncurses
作者: tomsawyer (安安)   2020-08-21 00:02:00
回车lul
作者: HMKRL (HMKRL)   2020-08-22 12:05:00
回车…你在用打字机写程式喔

Links booklink

Contact Us: admin [ a t ] ucptt.com