作者applejuice64 (凝时)
看板C_and_CPP
标题[问题] server socket 缓冲 相关问题
时间Wed Aug 19 15:58:20 2020
开发平台(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这个单字?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.73.244.217 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1597823902.A.6D3.html
※ 编辑: applejuice64 (42.73.244.217 台湾), 08/19/2020 16:02:05
1F:→ Killercat: 你用什麽当buffer?用istream的话有现成的istream::peek08/19 16:08
2F:→ applejuice64: 目前只用c,char buff[200]08/19 16:19
3F:→ Killercat: er... char array的话要不要清缓冲区不是你自己控制的?08/19 16:20
※ 编辑: applejuice64 (42.73.244.217 台湾), 08/19/2020 16:21:54
目前是主程式进入scanf的时候
文字打到一半(piz)
被pthread接收到的client讯息打断
虽然缓冲区没被清掉
继续输入za回车可以scanf完整的pizza
但是我想让pthread的讯息干扰完介面之後
pthread输出piz让介面好看一点
※ 编辑: applejuice64 (42.73.244.217 台湾), 08/19/2020 16:26:48
4F:→ Killercat: pthread收到的东西存到一个结构体 等scanf结束在 08/19 19:50
5F:→ Killercat: 把那个结构体印出来 08/19 19:50
6F:推 Davinais: 取消掉缓冲区直接读进 buf ,然後每次有接到讯息到时候 08/20 07:22
7F:→ Davinais: 再把 buf 印出来应该也可以,不过这样要自己处理倒退删 08/20 07:22
8F:→ Davinais: 除跟 enter 那些字元 08/20 07:22
9F:→ longlongint: 你讲的行为有点像ncurses 08/20 23:40
10F:→ tomsawyer: 回车lul 08/21 00:02
11F:推 HMKRL: 回车…你在用打字机写程式喔 08/22 12:05