作者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/m.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