我正在寫C語言的簡單客戶端 - 服務器程序來練習網絡編程。服務器可以使用多線程處理多個客戶端。每個客戶端都在一個單獨的線程中進行服務。客戶端使用兩個線程:一個從標準輸入接收用戶輸入,另一個輸出到標準輸出。爲什麼箭頭鍵搞砸了stdout?
我用普通的文本測試了程序,它完美地工作。但是,當我輸入箭頭鍵時(左鍵=^[[D,右鍵=^[[C,上鍵=^[[A,下鍵=^[[B]),其行爲非常奇怪。
例如看到以下輸出: 這是我在順序發送的輸入(在客戶端):
>> test
I got your message
>> test1
I got your message
>> test2
I got your message
>> test3
I got your message
這是在服務器中的(正確的)輸出:
Here is the message: test
Here is the message: test1
Here is the message: test2
Here is the message: test3
現在我輸入隨機方向鍵(輸入test3後):
>>^[[D^[[A^[[C^[[A^[[D^[[C^[[A^[[D^[[B^[[C^[[D^[[B^[[D^[[C^[[A^[[D^[[C^[[A^[[D^[[A^[[D^[[C^[[A
I got your message
但是,服務器打印什麼(我假設的人物進行轉義):
Here is the message: test
Here is the message: test1
Here is the message: test2
Here is the message: test3
Here is the message:
Now, I start inputting normal text:
>> test4
I got your message
>> test5
I got your message
>> test6
I got your message
>> test7
I got your message
>> test8
I got your message
>> test9
I got your message
>> test10
I got your message
當我檢查服務器的stdout,所有以前的打印輸出將被覆蓋:
Here is the message: test4
Here is the message: test5
Here is the message: test6
Here is the message: test7
Here is the message: test8
Here is the message: test9
Here is the message: test10
最重要的是,該行爲有箭頭的隨機按鍵改變我進入。有時,輸入不會覆蓋服務器的stdout,但會在stdout中插入輸入。
我不確定爲什麼會發生這種情況,但如果有人想看我的消息來源,我可以發佈它。來源不長 - 客戶端和服務器長度大約爲100行。
好的我測試了每個鍵的分開。
向下鍵和向上鍵似乎將stdout中的文件指針按行移動。左右鍵看起來什麼都不做。
你期望箭頭鍵做什麼? –
嘗試使用調試器並逐行讀取光標鍵輸入時,逐行瀏覽代碼,並查看將它發送到服務器時的操作。然後在服務器中執行相同的操作,以查看它是否接收到任何內容,並逐步處理代碼處理數據的方式。 –
我以爲它只會打印這些字符。 – 1729